Glide 中 centerCrop() 与 transform() 共用问题(包括 4.0.0 以上解决方法)

问题

当我们在显示一张图片的时候,想让他等比例缩放到ImageView的大小,又想这张图片实现矩形圆角。

我们一开始会想到这么设置:

.transform(new GlideRoundImage(getActivity()))
.centerCrop()

But,这样设置后,图片只有centerCrop效果,却没有矩形圆角效果。如图:

但是这并不是我们想要的效果,然后会想着去掉centerCrop看看是怎样的:

.transform(new GlideRoundImage(getActivity()))

结果却是这样的,没错! 图片并没有按比例缩放.。如图:

原因

看centerCrop()方法的源码可知,也是需要调用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转换成带centerCrop属性的bitmap,然后再转换成圆角。如下:

    @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);

附上矩形圆角的代码: https://github.com/wildma/GlideRoundImage


   转载规则


《Glide 中 centerCrop() 与 transform() 共用问题(包括 4.0.0 以上解决方法)》 wildma 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
利用高德地图关键字检索 POI-实现仿微信发朋友圈搜索附近位置 利用高德地图关键字检索 POI-实现仿微信发朋友圈搜索附近位置
前言由于项目中需要实现搜索附近位置作为收获地址,所以采用了高德地图的关键字检索POI来实现。官方Demo看了很复杂,估计很多人都不想看。但是看了我写的Demo你就会觉得So Easy啦! 先上效果图: 实现高德提供了千万级别的 POI(Po
2017-02-25
下一篇 
Android 一步一步教你集成高德地图 Android 一步一步教你集成高德地图
前言当项目中需要使用地图SDK的时候, 是选择高德地图还是百度地图呢?从对开发者友好角度,从容易上手角度:高德完胜百度! 所以我们公司的项目也选择了高德地图。好了!下面就开始高德地图的集成吧! 一、账号与Key的申请注册成为高德开发者需要分
  目录