当前位置: 首页 > article >正文

Glide 自定义圆角、铺满FitXY

在 Android 开发中,使用 Glide 来加载图片时,有时需要对图片进行特定的处理,比如设置圆角或者使图片完全填充到一个视图中(类似于 ImageView 的 scaleType 中的 FitXY)。以下是如何使用 Glide 来实现这些自定义需求的处理方案。

1. 自定义圆角

Glide 本身不直接支持圆角,但可以通过使用 Transformation 来实现。你可以使用 RoundedCorners 转换来添加圆角效果。例如:

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;

Glide.with(context)
    .load(url)
    .apply(new RequestOptions().transform(new RoundedCorners(radius)))
    .into(imageView);

这里的 radius 是圆角的半径。

2. 铺满 FitXY

Glide 默认情况下会尽可能保持图片的宽高比,但如果你需要像 ImageView 的 FitXY 那样铺满整个视图,可以通过自定义 Transformation 来实现。这通常涉及到重写图片的尺寸处理方式,使其完全匹配目标 ImageView 的尺寸。

你可以创建一个自定义的 Transformation 类来实现这一点:

import android.graphics.Bitmap;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import com.bumptech.glide.load.Key;

import java.security.MessageDigest;
/**
 * <p>
 * Description: [使用 BitmapTransformation 来实现图像的拉伸效果 (FitXY 的效果)]
 * </p>
 * // 使用 Glide 加载图片
 *         Glide.with(this)
 *                 .load(imgUrl)
 *                 .placeholder(R.drawable.default) // 占位图
 *                 .error(R.drawable.default) // 错误图
 *                 .transform(new FitXYTransformation (this), new GlideRoundTransformUtil(this, 3)) // 使用自定义的 FitXY 和圆角变换
 *                 .into(imageView);
 * ${tags}
 */
public class FitXYTransformation extends BitmapTransformation {
    private static final String ID = "com.example.glide.FitXYTransformation";
    private static final byte[] ID_BYTES = ID.getBytes(Key.CHARSET);

    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return Bitmap.createScaledBitmap(toTransform, outWidth, outHeight, false);
    }

    @Override
    public boolean equals(Object o) {
        return o instanceof FitXYTransformation;
    }

    @Override
    public int hashCode() {
        return ID.hashCode();
    }

    @Override
    public void updateDiskCacheKey(MessageDigest messageDigest) {
        messageDigest.update(ID_BYTES);
    }
}

然后,使用这个自定义的 Transformation:

Glide.with(context)
    .load(url)
    .apply(new RequestOptions().transform(new FitXYTransformation()))
    .into(imageView);

结合使用圆角和 FitXY

如果你需要同时应用圆角和 FitXY 效果,可以将两个转换结合起来:

Glide.with(context)
    .load(url)
    .apply(new RequestOptions().transform(new FitXYTransformation(), new RoundedCorners(radius)))
    .into(imageView);

这样,图片首先会被缩放以铺满 ImageView,然后应用圆角效果。注意,这种组合可能会导致圆角不太明显,因为首先图片被缩放填充了整个视图。

通过这些方法,你可以灵活地使用 Glide 来满足不同的图片显示需求。


http://www.kler.cn/a/446301.html

相关文章:

  • Loki 微服务模式组件介绍
  • qlib优缺点
  • 【Java基础面试题024】Java中包装类型和基本类型的区别是什么?
  • SparkSQL案例
  • Navicat 17 功能简介 | SQL 美化
  • clickhouse-题库
  • MFC/C++学习系列之简单记录9——简单加法
  • ARP具体过程
  • Unity局部和世界坐标系相互转换的实现原理
  • java——Synchronized与Lock
  • 2024年《网络安全事件应急指南》
  • oracle 设置归档日志存放路径
  • 网络安全 | 五大核心领域:防护、检测、响应、恢复与治理
  • 欢乐力扣1-10
  • filebeat7.0安装和基本使用
  • 【C++】智能指针详解
  • SpringBoot Redis list 消息队列
  • HTTP—03
  • Flutter组件————FloatingActionButton
  • 【优先算法】双指针 --(结合例题讲解解题思路)(C++)
  • 【java】全文索引,普通索引,以及ES搜索引擎组件的关系
  • MATLAB中cvx工具箱的使用
  • 三次翻转实现数组元素的旋转
  • 深入了解Python模拟负载均衡器:将请求高效分发至多个服务器
  • Emacs折腾日记(四)——elisp控制结构
  • Django 模板分割及多语言支持案例【需求文档】-->【实现方案】