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(...);
目录
相关文章
[笔记]音视频学习之SDL篇《二》 绘制平铺的背景图并居中放置另一图片
[笔记]音视频学习之SDL篇《二》 绘制平铺的背景图并居中放置另一图片
|
2月前
Fireworks如何给图片添加阴影效果? fw给图片增加阴影效果的技巧
有时需要给图片添加阴影效果。那么,Fireworks软件中如何给图片添加阴影效果呢?
41 1
|
6月前
|
存储 前端开发 JavaScript
canvas系列教程03 —— 线的样式、绘制文本、操作图片(图片的渲染、缩放、裁剪、切割、平铺、特效)、变换元素(平移、缩放、旋转)(一)
canvas系列教程03 —— 线的样式、绘制文本、操作图片(图片的渲染、缩放、裁剪、切割、平铺、特效)、变换元素(平移、缩放、旋转)(一)
540 0
|
6月前
|
机器学习/深度学习 前端开发 算法
canvas系列教程03 —— 线的样式、绘制文本、操作图片(图片的渲染、缩放、裁剪、切割、平铺、特效)、变换元素(平移、缩放、旋转)(二)
canvas系列教程03 —— 线的样式、绘制文本、操作图片(图片的渲染、缩放、裁剪、切割、平铺、特效)、变换元素(平移、缩放、旋转)(二)
107 0
CSS3 背景图片显示尺寸(放大/缩小背景图)(background-size) (背景适配 自适应)
CSS3 背景图片显示尺寸(放大/缩小背景图)(background-size) (背景适配 自适应)
|
前端开发 容器
css——图片缩放,拉伸,变形的解决办法
css——图片缩放,拉伸,变形的解决办法
758 0
|
C# 小程序
给图片加上阴影效果
原文:给图片加上阴影效果 今天写一个小程序有一个给图片加上阴影的需求,记得WPF的Effect中就有阴影特效,就打算用它了。代码如下:     using (var imageStreamSource = File.
1222 0
|
移动开发 计算机视觉 Python
把图片按照指定大小剪裁,不够的地方加黑边
1 # -*- coding: utf-8 -*- 2 3 import os 4 import sys 5 import numpy as np 6 import cv2 7 8 IMAGE_SIZE = 224 9 10 11 # 按照指定图像大小调整尺寸 12 de...
1258 0