前提
以前都是用CircleImageView来显示圆形头像,近来发现经常用的Glide也可以显示圆形头像,就在项目中试试
坑一
Glide中API中大致找了一下没找到,后来在网上搜到
bitmapTransform(new CropCircleTransformation(getContext()))
这个API可以,但是CropCircleTransformation一直不识别这个东东,后来去Glide github找到要导入另一个包
compile 'jp.wasabeef:glide-transformations:2.0.0'
然后就可以了,愉快的玩耍~~~~
坑二
显示头像以后,要更换头像了,但是所有操作以后返回图片剪切的地址,然后开始显示
Glide.with(this)
.load(Uri.fromFile(new File(path)))
.bitmapTransform(new CropCircleTransformation(getContext()))
.into(userIcon);
发现不能重复设置头像,设置以后还是显示第一次的头像,但是查看剪裁的图片已经更换了,但是就是不显示,后来google了一下,找到Glide默认是有缓存的,然后地址都是同一个,所以显示的是缓存的图片也就是第一次剪裁的图片
坑三
找到前面的问题,然后开始解决,清除缓存就可以了吗
Glide.get(getContext()).clearMemory();
Glide.get(getContext()).clearDiskCache();
然后悲剧发生了,直接崩溃,google一下发现原来
Glide.get(getContext()).clearDiskCache();
不能再UI线程操作,并且
Glide.get(getContext()).clearMemory();
能在UI线程操作,所以开始解决问题:
Glide.get(getContext())
.clearMemory();
Observable.create( subscriber1 -> {
Glide.get(getContext()).clearDiskCache();
subscriber1.onNext(1);
subscriber1.onCompleted();
})
.compose(RxUtils.applyIOToMainThreadSchedulers())
.subscribe(o -> {
Glide.with(this)
.load(Uri.fromFile(new File(path)))
.bitmapTransform(new CropCircleTransformation(getContext()))
.into(userIcon);
});
至此完美解决,然后删除build中的
compile 'de.hdodenhof:circleimageview:2.0.0'