Glide 显示圆形头像

前提

以前都是用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'

你可能感兴趣的:(Glide 显示圆形头像)