如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形)

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形)

在这里插入图片描述

在Android开发中,使用Glide加载图片时,我们经常需要对图片进行特定的处理,比如裁剪和圆角变换,特别是一些设计稿,他可能只有上面2个圆角。这篇博客将指导您如何在Glide中结合使用CenterCrop和自定义圆角变换。

简介

Glide是一个流行的Android图像加载库,它提供了强大的图片处理和缓存功能。在许多情况下,我们需要对图片进行裁剪以适应UI的需求,并可能想要应用圆角以增强视觉效果。Glide提供了一种简单的方式来实现这些效果。通过在Glide侧先进行裁剪,避免做完圆角的图到了控件端因为scale未显示出圆角部分。

实现步骤

1. 创建自定义圆角变换

首先,我们需要创建一个自定义的BitmapTransformation,该变换只对图片的顶部应用圆角。这个类可以这样实现:

public class TopCornersRoundedTransformation extends BitmapTransformation {
    private final float radius; // 圆角半径

    public TopCornersRoundedTransformation(float radius) {
        this.radius = radius;
    }

    @Override
    protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
        return topRoundedCorners(pool, toTransform);
    }

    private Bitmap topRoundedCorners(BitmapPool pool, Bitmap source) {
        if (source == null) return null;

        Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        result.setHasAlpha(true);

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));

        // 绘制圆角矩形(只对左上和右上角应用圆角)
        RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
        canvas.drawRoundRect(rectF, radius, radius, paint);

        // 绘制矩形以覆盖底部两个角
        RectF bottomRect = new RectF(0f, radius, source.getWidth(), source.getHeight());
        canvas.drawRect(bottomRect, paint);

        return result;
    }

    @Override
    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
        messageDigest.update(("top_corners_rounded" + radius).getBytes(CHARSET));
    }
}

在这里插入图片描述

2. 在Glide中使用变换

接下来,在Glide的加载链中,我们结合使用CenterCrop和我们的自定义圆角变换:

int radius = dpToPx(5); // 圆角半径,根据需要调整

Glide.with(mActivity)
    .load(getFirstImageUrl(productBean.getUrls()))
    .apply(new RequestOptions()
            .transforms(new CenterCrop(), new TopCornersRoundedTransformation(radius)))
    .into(pictureIV);

这段代码首先将图片进行CenterCrop处理,然后应用自定义的圆角变换。transforms方法允许我们链式地应用多个变换。

3. dpToPx方法

为了将dp单位转换为像素值,您可以使用如下方法:

public int dpToPx(int dp) {
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

总结

通过结合使用CenterCrop和自定义的TopCornersRoundedTransformation,我们可以在Glide中轻松实现对图片的裁剪和圆角处理。这种方式既保留了图片的纵横比,又增加了视觉上的吸引力,非常适合现代的Android应用开发。

记住,Glide的变换功能非常强大,可以根据您的具体需求进行定制和扩展。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/308054.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FS【1】:SSP

文章目录 前言1. Abstract2. Introduction2.1. Motivation2.1.1. Few-shot Segmentation (FSS) Task2.1.2. Few-shot Segmentation (FSS) Problem 2.2. Contribution 3. Methods3.1. Motivation3.2. Overview of the architecture4.3. Self-support Prototype4.4. Adaptive Sel…

代理IP连接不上?网速过慢?自检与应对方法来了

当您使用代理时,您可能会遇到不同的代理错误代码显示代理IP连不通、访问失败、网速过慢等种种问题。 在本文中中,我们将讨论您在使用代理IP时可能遇到的常见错误、发生这些错误的原因以及解决方法。 一、常见代理服务器错误 当您尝试访问网站时&#…

用户管理第一节课,阿里生成代码包

鱼皮教程生成所用到的 一、网址 网址: Cloud Native App Initializer (aliyun.com) 二、仿照生成 2.1 Maven Project & Java 2.2 Spring Boot版本 2.3 高级选项 2.3.1 项目名称可根据需求改 注意:不要有空格 2.4 应用架构 选择:单…

彻底关闭win10的自动更新Update

停止更新服务 任务管理器中search windows update,停止服务,以及禁止恢复里面的action 停止任务计划 computer 右键 电脑管理,停止全部工作计划。

慕课热搜01

uniapp过滤器使用 创建一个过滤器: 在入口函数注册过滤器 // 注册过滤器 import * as filters from "./filters/index.js"Object.keys(filters).forEach(key>{Vue.filter(key,filters[key]) })使用过滤器: onPageScroll , uniapp监听滚动…

Web APIs知识点讲解

学习目标: 能获取DOM元素并修改元素属性具备利用定时器间歇函数制作焦点图切换的能力 一.Web API 基本认知 1.作用和分类 作用: 就是使用 JS 去操作 html 和浏览器分类:DOM (文档对象模型)、BOM(浏览器对象模型) 2.DOM DOM(Document Ob…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第六天-Linux信号(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

GBASE南大通用 GBase 8a 产品构建数仓系统架构

l GBASE南大通用 GBase 8a 产品构建数仓应用的系统架构: 架构 技术实现特点 适用场景 独立数据仓库(集市)系统架构 一套GBase 8a物理集群 适用于数据规模较小的业务场景 适用于各业务之间数据互访较频繁的业务场景 适用于单一独立的业务…

k8s源码阅读环境配置

源码阅读环境配置 k8s代码的阅读可以让我们更加深刻的理解k8s各组件的工作原理,同时提升我们Go编程能力。 IDE使用Goland,代码阅读环境需要进行如下配置: 从github上下载代码:https://github.com/kubernetes/kubernetes在GOPATH目…

Python之文件的相关操作

文件和文件夹的移动、复制、删除、重命名 一、概述 Python中对文件和文件夹进行移动、复制、删除、重命名,主要依赖os模块和shutil模块,以下用实例集中演示文件的移动、复制、删除、重命名,用到的时候直接查询即可。 二、实例 1 #!/usr/bi…

C++11教程:C++11新特性大汇总(第六部分)

C11是2011年发布的C标准,是C的一次重大升级。 第十二部分:C多文件编程 十一、C11列表初始化(统一了初始化方式) 我们知道,在 C98/03 中的对象初始化方法有很多种,请看下面的代码: //初始化列…

C#编程-实现在文本文件中的读和写

实现在文本文件中的读和写 Stream类用于从文本文件读取数据和向文本文件写入数据。它是一个抽象类,支持向流读写字节。如果文件的数据仅是文本,那么您可以使用StreamReader类和StreamWriter类来完成相应的读和写任务。 StreamReader类 StreamReader类继承自从抽象类TextRea…

大家都在问的牛仔外套来啦

经典永不过时的牛仔外套, 绝对是衣橱里必不可少的时尚单品之一 重工水洗破洞乞丐风,个性潮流感十足 时尚帅气,男宝女宝都能穿还有妈妈款哦 经典宽松版型,不挑身材不挑人穿对身材包容性很强 怎么穿都好看,简单搭配…

手轮脉冲平滑处理笔记

这是一个求手脉倍率((Hw_Control.mult_ratio)与手脉脉冲计数延迟次数即累计过去n次的平均值(Hw_Control.lag_num)之间关系算法的计算过程笔记文档 1、已知 mult_ratio=1时 lag_num=10; mult_ratio=10时 lag_num=20; .mult_ratio==100时 lag_num=30; 以此类推 2、设lag_num…

如何实现两台Linux虚拟机ssh免密登录

实验开始前 1.准备好两台虚拟机(下载好镜像文件的) 2.实验步骤 公钥验证:(免密登陆验证方式) (1)生成非对称秘钥 [rootclient ~]# ssh-keygen -t rsa Generating public/private rsa key pai…

无线与局域网技术期末划题自制答案

简答题 1.描述5G的三大应用场景? 5G的三大应用场景包括增强型移动宽带(eMBB)、超可靠低延迟通信(URLLC)和大规模机器类型通信(mMTC)。增强型移动宽带(eMBB)主要用于支持…

数字化转型究竟是什么意思?

在这个飞速发展的数字时代,数字化转型已成为各个行业不可回避的趋势。从企业到组织,都在努力借助先进的数字技术,以迎合时代潮流,提升效率、创造价值。数字化转型不仅仅是技术的升级,更是一场全方位的变革,…

3d模型为什么只显示线是什么原因怎么解决---模大狮模型网

在3D建模中,有时我们会遇到模型只显示线框,而没有填充色或纹理的情况。这种问题可能会导致场景的不协调和视觉效果的不理想,影响到我们的设计效率和效果。本文将探讨一些可能导致该问题的原因,并提供解决方法,以帮助您…

DUET: Cross-Modal Semantic Grounding for Contrastive Zero-Shot Learning论文阅读

文章目录 摘要1.问题的提出引出当前研究的不足与问题属性不平衡问题属性共现问题 解决方案 2.数据集和模型构建数据集传统的零样本学习范式v.s. DUET学习范式DUET 模型总览属性级别对比学习正负样本解释: 3.结果分析VIT-based vision transformer encoder.消融研究消…

导波光学理论基础

导波光学理论基础 一、电磁场基本方程 1.1 麦克斯韦方程组、物质方程、边值关系 麦克斯韦方程组 麦克斯韦方程组是一组微分方程,只能求得通解 如果需要唯一的确定各场矢量,还需补充一些边界条件 线性、静止、各向同性介质的物质方程 D ⃗ ε E ⃗ …