問題
當(dāng)我們在顯示一張圖片的時候,想讓他等比例縮放到ImageView的大小,又想這張圖片實現(xiàn)矩形圓角.
我們一開始會想到這么設(shè)置
.transform(new GlideRoundImage(getActivity()))
.centerCrop()
But,這樣設(shè)置后,圖片只有centerCrop效果,卻沒有矩形圓角效果.如圖
但是這并不是我們想要的效果,然后會想著去掉centerCrop看看是怎樣的
.transform(new GlideRoundImage(getActivity()))
結(jié)果卻是這樣的,沒錯! 圖片并沒有按比例縮放. 如圖:
原因
看centerCrop()方法的源碼可知,也是需要調(diào)用transform()方法的.所以前后共用CenterCrop會覆蓋掉GlideRoundImage的效果
public BitmapRequestBuilder<ModelType, TranscodeType> centerCrop() {
return transform(glide.getBitmapCenterCrop());
}
解決方法:
.transform(new CenterCrop(getActivity()),new GlideRoundImage(getActivity()))
2個效果同時放在transform里面就可以解決問題了,效果圖
Glide 4.0.0以上解決方法
將圓角矩形GlideRoundImage中的transform方法改成如下即可,意思就是先將bitmap轉(zhuǎn)換成帶centerCrop屬性的bitmap,然后再轉(zhuǎn)換成圓角向胡。如下:
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);
return roundCrop(pool, bitmap);
}
代碼中使用:
RequestOptions myOptions = new RequestOptions().transform(new GlideRoundImage(this,20));
Glide.with(this)
.load(imgUrl)
.apply(myOptions)
.into(mIv_img);