Glide 自定义圆角、铺满FitXY

news/2024/12/23 2:57:29 标签: glide

在 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.niftyadmin.cn/n/5796241.html

相关文章

Linux —— 搭建Apache服务器

一、基本概念 定义 Apache 服务器&#xff08;全称 Apache HTTP Server&#xff09;是一款开源的、跨平台的 Web 服务器软件。它通过 HTTP 协议提供网页服务&#xff0c;能够将存储在服务器上的网页文件&#xff08;如 HTML 文件、图片、脚本等&#xff09;发送给客户端&#…

OpenAI发布全新AI模型 o3 与 o3-mini:推理与编码能力迎来重大突破. AGI 来临

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

鸿蒙UI开发——组件滤镜效果

1、概 述 ArkUI为组件提供了滤镜效果设置&#xff0c;背景滤镜、前景滤镜、合成滤镜。我们可以通过以下方式为组件设置对应的滤镜效果。 Text(前景滤镜)// ..其他属性.foregroundFilter(filterTest1) // 通过 foregroundFilter 设置模糊效果Text(背景滤镜)// ...其他属性.bac…

Python 写的 《监控视频存储计算器》

代码&#xff1a; import tkinter as tk from tkinter import ttk import math from tkinter.font import Fontclass StorageCalculator:def __init__(self, root):self.root rootself.root.title("监控视频存储计算器")self.root.geometry("600x800")s…

[JavaScript] 我该怎么去写一个canvas游戏

首先你得知道canvas的基础语法&#xff0c;此处不过多赘述. 一、如何更新视图 canvas里面有个clearRect方法&#xff0c;可以遮住画布中一个矩形部分. 但是你想这样做就难免会遮住一些本不该遮住的东西&#xff0c;因为它是一个矩形&#xff0c;并且你还要计算它的位置和尺寸…

【Mysql】函数有哪些

mysql函数有哪些&#xff1f; MySQL 提供了许多内置函数&#xff0c;用于执行各种操作&#xff0c;包括字符串处理、日期时间操作、数学计算、数据转换等。以下是一些常用的 MySQL 函数分类及其示例&#xff1a; 字符串函数 CONCAT(str1, str2, ...)&#xff1a;将多个字符串…

Kubernetes(K8s)学习笔记

一、引言 Kubernetes&#xff08;简称K8s&#xff09;是一个开源的容器编排和管理平台&#xff0c;由Google主导开发&#xff0c;旨在自动化容器化应用程序的部署、扩展和管理。K8s以其强大的功能、高度的可扩展性和广泛的社区支持&#xff0c;已成为现代云原生应用架构的核心…

火山引擎FORCE:智算能力全面升级

火山引擎智算专场 &#xff1a; 有幸参加 2024年 12月18日 在 上海国际博览中心 15&#xff1a;00~17&#xff1a;00的 智算专场。 这里 火山引擎智算专场图片 &#xff1a; 火山引擎智算专场内容 &#xff1a; 火山引擎图片 智算专场&#xff1a;乘云之势&#xff0c;智启未…