glide 设置圆角导致图片变形?

简介: glide 设置圆角导致图片变形?

glide 设置圆角的时候会导致ImageView的scaleType属性无效?导致图片变形?


原因:属性覆盖了。

为什么呢,其实是因为重复调用了transform方法导致的,


比如new CenterCrop(mContext)或者是new RequestOptions().centerCrop()


public class CenterCrop extends BitmapTransformation {
  ....
  // Bitmap doesn't implement equals, so == and .equals are equivalent here.
  @SuppressWarnings("PMD.CompareObjectsWithEquals")
  @Override
  protected Bitmap transform(
      @NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
    return TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);
  }
}
  public RequestOptions centerCrop() {
    return transform(DownsampleStrategy.CENTER_OUTSIDE, new CenterCrop());
  }

可以看到都有调用transform方法的,

再看一种写法

new  RequestOptions().centerCrop().transform(...);

很明显重复了,centerCrop内部已经调用了transform方法,然后后面又跟了一个transform

解决思路:既然多次调用会覆盖,那就一次调用多个属性。

自定义一个类去继承BitmapTransformation

/**
 * Created by yechaoa on 2018/9/10.
 * Describe : glide 圆角
 */
public class GlideRoundTransform extends BitmapTransformation {
    private static float radius = 0f;
    public GlideRoundTransform(int dp) {
        super();
        radius = Resources.getSystem().getDisplayMetrics().density * dp;
    }
    @Override
    protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
        Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);
        return roundCrop(pool, bitmap);
    }
    private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;
        Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
        canvas.drawRoundRect(rectF, radius, radius, paint);
        return result;
    }
    public String getId() {
        return getClass().getName() + Math.round(radius);
    }
    @Override
    public void updateDiskCacheKey(MessageDigest messageDigest) {
    }
}

调用:

参数直接传圆角的度数就行


     

RequestOptions options =new  RequestOptions().transform(new GlideRoundTransform(5));
        Glide.with(mContext).load(...).apply(options).into(...);
目录
相关文章
|
10月前
|
前端开发 容器
css——图片缩放,拉伸,变形的解决办法
css——图片缩放,拉伸,变形的解决办法
441 0
|
12月前
|
容器
项目实战(三):banner加载网络图片,不变形,可缩放可完全显示
项目实战(三):banner加载网络图片,不变形,可缩放可完全显示
3D立方体图片切换动画
在线演示 本地下载
966 0
|
C# 小程序
给图片加上阴影效果
原文:给图片加上阴影效果 今天写一个小程序有一个给图片加上阴影的需求,记得WPF的Effect中就有阴影特效,就打算用它了。代码如下:     using (var imageStreamSource = File.
1177 0
|
Android开发 缓存
Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果
 Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架。
1876 0
|
前端开发 Android开发 开发工具
Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框
 Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框 在Android早期的开发中,如果涉及到圆形图片的处理,往往需要借助于第三方的实现,见附录文章1,2。
1290 0
|
C# 图形学
GDI+ 如何将图片绘制成圆形的图片
大概意思就是不生成新的图片,而是将图片转换为圆形图片。 实现代码如下: private Image CutEllipse(Image img, Rectangle rec, Size size) { Bitmap bitmap = new Bitmap(size.
1004 0
|
Android开发
Android CustomShapeImageView对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等
 Android CustomShapeImageView对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等 Android CustomShapeImageView是github上一个第三方开源的对图片进行各种样式...
1377 0
|
前端开发
Glide加载圆形图片
方案1:经过验证,可以完美实现 Glide.with(context).load(url).asBitmap().centerCrop().into(new BitmapImageViewTarget(imageView) { @Override prot...
840 0
|
Android开发 开发工具
Android大图片之缩略图,以及对原图按照指定宽高裁剪成缩略图
 《Android大图片之变换缩略图,以及对原始大图片按照指定宽、高裁剪成缩略图》 在Android的ImageView加载图像资源过程中,出于性能和内存开销的需要,有时候需要把一个原始的超大图片按照一定比例等比例缩放成较小的缩略图,或者需要把原始的超大图片,裁剪成指定宽高值的较小图片,针对这种开发需求,可以使用Android SDK自身提供的工具类:ThumbnailUtils完成。
1193 0