Android ImageView 设置圆角及外边框样式

Android圆角ImageView的几种实现方式(包含四个角的分别设置) 在实际的开发中,我们经常会遇到需要圆角ImageView的情况,但是这种ImageView官方是没有提供的,所以需要我们去自己重写ImageView来达到圆角的效果,但是实现这种圆角效果其实有几种不同的实现方式,所以这一篇就对不同的实现方式进行讲解,并简单分析。 一.BitmapShader方式 首先简单了解下BitmapShader,BitmapShader是Shader的子类,Shader在三维软件中我们称之为着色器,所以通俗的理解,Shader的作用是给图像着色或者上色,BitmapShader 阅读详情

ImageView 设置圆角及外边框样式

我们通常可以通过以下几种方式来实现:

  1. 通过图片加载库,比如 Glide 或 Fresco 设置图片转换规则来剪裁 bitmap 实现圆角,通过绘制圆角矩形边框来实现外边框样式;
  2. 通过自定义的父布局包裹 ImageView,在父布局中设置指定的路径裁剪画布,实现圆角;
  3. 在 ImageView 中设置指定路径及画笔裁剪画布,绘制边框,实现圆角及外边框样式;

本篇主要介绍的是第 3 种方式,先来看效果图:

设置圆角效果图设置圆角及外边框效果图


一、设置圆角逻辑:裁剪画布


// 以下是伪代码

// 指定浮点数组,包含 4 组 [x,y] 半径值,顺序:左上,右上,右下,左下
val radii = floatArrayOf(
    topLeftRadius, topLeftRadius, topRightRadius, topRightRadius,
    bottomRightRadius, bottomRightRadius, bottomLeftRadius, bottomLeftRadius
)

// 设置圆角矩形坐标
val rectF = RectF()
rectF.set(left, top, right, bottom)

// 设置上下左右 4 个圆角路径
val path = Path()
path.addRoundRect(rectF, radii, Path.Direction.CW)

// 或者 设置圆形
path.addCircle(radius, radius, radius, Path.Direction.CW)

// 裁剪画布
canvas.clipPath(path)

super.onDraw(canvas)


二、设置外边框逻辑:在绘制 Drawable 后再绘制外边框


// 以下是伪代码

// 指定浮点数组,包含 4 组 [x,y] 半径值,顺序:左上,右上,右下,左下
val radii = floatArrayOf(
    topLeftRadius, topLeftRadius, topRightRadius, topRightRadius,
    bottomRightRadius, bottomRightRadius, bottomLeftRadius, bottomLeftRadius
)

// 设置外边框矩形坐标
val borderRectF = RectF()
borderRectF.set(left, top, right, bottom)

// 设置外边框矩形路径
val borderPath = Path()
borderPath.addRoundRect(borderRectF, radii, Path.Direction.CW)

// 设置外边框画笔
val borderPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
    color = borderColor
    strokeWidth = borderWidth
    style = Paint.Style.STROKE
}

// 先让系统完成 Drawable 绘制
super.onDraw(canvas)

// 再绘制圆角矩形边框
canvas.drawPath(borderPath, borderPaint)

// 或者 绘制圆形边框
canvas.drawCircle(radius, radius, radius, borderPaint)


示例中效果都已实现,代码已发布到 mavenCentral 仓库,可直接在项目中集成使用


三、在项目中集成

1. 添加依赖

repositories {
    mavenCentral()
}
implementation 'io.github.weilianyang:RoundImageView:1.0.2'

2. 控件样式

<declare-styleable name="RoundImageView">

    <!-- 圆角大小,如果只设置了此值,则默认会使用其作为所有圆角的值 -->
    <attr name="riv_radius" format="dimension" />

    <!-- 顶部左侧圆角大小 -->
    <attr name="riv_topLeft_radius" format="dimension" />

    <!-- 顶部右侧圆角大小 -->
    <attr name="riv_topRight_radius" format="dimension" />

    <!-- 底部左侧圆角大小 -->
    <attr name="riv_bottomLeft_radius" format="dimension" />

    <!-- 底部右侧圆角大小 -->
    <attr name="riv_bottomRight_radius" format="dimension" />

    <!-- 作为圆形图片,和 riv_radius 一起使用。
         如果未设置 riv_radius,半径将取宽高最小值的一半 -->
    <attr name="riv_roundAsCircle" format="boolean" />

    <!-- 外边框颜色 -->
    <attr name="riv_borderColor" format="color" />

    <!-- 外边框宽度 -->
    <attr name="riv_borderWidth" format="dimension" />

</declare-styleable>

3. 在 xml 中使用

(1)分别指定4个圆角的大小

<com.william.widget.RoundImageView
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:scaleType="centerCrop"
    app:riv_bottomLeft_radius="32dp"
    app:riv_bottomRight_radius="25dp"
    app:riv_topLeft_radius="14dp"
    app:riv_topRight_radius="20dp" />


(2)作为圆形图片使用

<com.william.widget.RoundImageView
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:scaleType="centerCrop"
    app:riv_roundAsCircle="true" />


(3)设置外边框宽度和颜色

<com.william.widget.RoundImageView
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:scaleType="centerCrop"
    app:riv_borderColor="#ff00ff"
    app:riv_borderWidth="5dp"
    app:riv_radius="1dp" />


4. 在 代码 中使用

(1)指定圆角大小及边框样式

/**
 * @param radius 圆角大小,当 asCircle 为 true 时,值作为圆形图片的半径,如果为0,则将取宽高最小值的一半
 * @param borderWidth 外边框宽度
 * @param borderColor 外边框颜色
 * @param asCircle 作为圆形图片使用,默认 false
 */
fun setRadiusAndBorder(
    radius: Float,
    borderWidth: Float = 0f,
    @ColorInt borderColor: Int = 0,
    asCircle: Boolean = false,
) {
    this.radius = radius
    this.borderWidth = borderWidth
    this.borderColor = borderColor
    this.roundAsCircle = asCircle

    updateBorderPaint()
}


(2)分别指定4个圆角的大小及边框样式

/**
 * @param topLeftRadius 顶部左侧圆角大小
 * @param topRightRadius 顶部右侧圆角大小
 * @param bottomLeftRadius 底部左侧圆角大小
 * @param bottomRightRadius 底部右侧圆角大小
 * @param borderWidth 外边框宽度
 * @param borderColor 外边框颜色
 */
fun setRadiusAndBorder(
    topLeftRadius: Float = 0f,
    topRightRadius: Float = 0f,
    bottomLeftRadius: Float = 0f,
    bottomRightRadius: Float = 0f,
    borderWidth: Float = 0f,
    @ColorInt borderColor: Int = 0
) {
    this.topLeftRadius = topLeftRadius
    this.topRightRadius = topRightRadius
    this.bottomLeftRadius = bottomLeftRadius
    this.bottomRightRadius = bottomRightRadius
    this.borderWidth = borderWidth
    this.borderColor = borderColor

    updateBorderPaint()
}


附 Github 源码:RoundImageView

Android 圆角圆形ImageView(超简单实现) 前言:今天偶然看到我之前写过的一篇博客 Android项目中遇到的坑之(Android圆角圆形图 一),我在想,这不就是在模仿ImageView么,我为什么要模仿,直接拿来用不是更好么?我能直接在ImageView的源码上去改改代码? 于是就有了下面这篇文章了。先上一张效果图:效果还是很不错的,代码更简单哦~~~ 但凡搞过android的童鞋一定都知道ImageView,既然ImageView已经处 阅读详情

相关推荐

Android 自定义组件实现圆角ImageView

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。

2301_79098336的博客 1249

android 方式实现imageview圆角

目前已经更新的部分资料:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!= pxVal) {/**动态设置type[外链图片转存中…(img-NEOwPpWm-1714687831834)][外链图片转存中…(img-6xNo2R9D-1714687831835)][外链图片转存中…(img-MKGIl5Mw-1714687831836)]《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

2401_84009065的博客 157

Android自定义圆形图片,设置边框

Android自定义圆形图片,可设置最多两个的外边框。包括从网络获取图片显示。 解决图片锯齿问题。 解决图片变形问题

wangqing830414的专栏 1万+

Android开发 两种ImageView 圆角化的方法与效果对比

两种方法都可以完美实现圆角化,第二种重载控件自绘的方法也是不错的。可以实现特殊复杂的要求,比如某一个角或两个角圆角化。直接在需要圆角化的ImageView外部嵌套一层CardView控件即可。代码如下:(注:网上您能搜索到的都是。

wh445306 1608

VSCode CMake 安装与配置详解

概述 在windows上使用cmake编译C/C++程序时,首先需要CMake,安装gcc/g++编译环境,然后使用VSCode 以及配置下CMakelist.txt。 所需工具: VSCode (需要安装以下插件) C/C++ C++ Intellisense CMake CMake tools CMake Tools Helper CMake MinGW 安装CMake 下载链接:...

Markus 8万+

从理论到板级:FOC电机驱动硬件电路全链路设计解析

本文从硬件工程师视角,深度解析FOC电机驱动从理论到板级实现的全链路设计。重点剖析了电源保护、核心采样电路、三相逆变桥与驱动电路等关键硬件模块的设计要点与实战经验,强调硬件是FOC算法可靠运行的基石,并提供了PCB布局布线的核心原则,帮助开发者构建高性能、高可靠性的电机驱动硬件平台。

weixin_29240711的博客 332

Android ImageView 圆角实现

Android开发过程中,ImageView是必不可少的几种控件之一,通常为了美观,图标等内容会设置为圆角,以下简单总结了几种设置圆角的方法。RoundImageView为第三方库,在build.gradle(:app)中使用以下语句导入: 该控件使用起来也非常方便,圆角设置为10dp示例如下: 效果如下: 2. CardView CardView为Android系统自带控件,使用CardView包裹ImageView也可以实现圆角效果,需要注意的是,CardView有可能会影响到控件层级,可以通过设置避

Misdirection_XG的博客 7261

【深度学习新浪潮】ISP芯片算法技术简介及关键技术分析

ISP(Image Signal Processor)芯片作为现代影像系统的核心组件,负责对图像传感器输出的原始信号进行后期处理。ISP的主要功能包括线性纠正、噪声去除、坏点修复、色彩校正以及白平衡调整等,这些处理步骤对于提高图像质量和视觉效果至关重要。随着科技的进步,ISP芯片不仅提升了图像的清晰度和色彩准确性,还通过高效的算法增强了拍摄体验,尤其是在低光环境下的表现。

专注:太空算力、AI infra、异构调度、大模型成本工程 1223

58.圆角图片

绘制流程:1.根据获取的属性值,判断显示模式,并设置圆形图片、外边框、内边框的半径值2.画边框3.画图片内容(1)获取原图(2)得到正方形图(3)得到缩放图(4)得到圆形图public class MyRoundImageView extends ImageView {private int defaultColor = 0xffffffff; private ShowType mShowT...

weixin_33857679的博客 77

RHCA II之路---EX442-10

这题比较耗时,可以多开2个窗口让他跑起来后先做后面的题目。

Q先生 585

13《CAN总线五种错误类型,故障判定全解析》

CAN总线规定,发送节点在发送完EOF字段后,会留出一个ACK Slot(应答槽)。这个槽里,发送节点自己会输出隐性电平(逻辑1),然后“期待”至少有一个其他节点在这个槽里把它拉成显性电平(逻辑0)。如果这个槽结束时仍然是隐性电平,发送节点就判定:刚才那帧报文,没有任何一个节点成功接收——这就是应答错误。简单说,就是“我喊了一嗓子,却没人应声”。

2401_88858637的博客 264

shape绘制形状基础详细解析

android 的样式主要则是通过 shape、selector、layer-list、level-list、style、theme、layer、bitmap 等组合实现 这篇文章主要介绍最基础的形状定义工具shape 1.Android develelopers官方解释 Defines a generic graphical “shape.” Any Shape can be drawn to a Canvas with its own draw() method, but more graphical.

DASHBB的博客 4101

【测绘程序设计】——潮汐调和分析

最小二乘潮汐调和分析源码、使用示例及数据

C_xxy's blog 2652

推荐开源项目:NiceImageView - 美观易用的图像视图库

在移动应用开发中,处理和展示图片往往是一项重要的任务。`NiceImageView` 是一个高度定制化的Android图像视图组件,让你能够轻松地创建各种形状的图像视图,包括圆角、圆形,甚至带边框的图像。这个开源项目由SheHuan维护,旨在简化开发者的工作流程,提高UI设计的灵活性。 ### 项目技术分析 `NiceImageView` 源自 `AppCompatImageView` 的扩展...

gitblog_00094的博客 507

GoAnywhere MFT 身份验证绕过漏洞(CVE-2024-0204)

GoAnywhere MFT 身份验证绕过漏洞(CVE-2024-0204)

weixin_43567873的博客 387

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

github上的圆形图片框架CircleImageView使用及解析

github一个很轻巧的圆形图片类。在https://github.com/hdodenhof/CircleImageView。CircleImageView使用该类继承于ImageView ,除了在xml定义时使用它代替,其他的跟ImageView一样.该空间定义了三个自定义属性,使用的时候可选择是否添加<de.hdodenhof.circleimageview.CircleImageView

recall2012的专栏 9012

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

玩会儿Compose,原神主题列表

Jetpack Compose出来有一段时间了,一直都没有去尝试,这次有点想法去玩一玩这个声明性界面工具,就以“原神”为主题写个列表吧。 整体设计参考DisneyCompose 效果图: 数据源 因为数据比较简单,也就只包含图片、姓名、描述等。所以在后台数据存储上选择的是Bmob后端云,一个方便前端开发的后端服务平台。 主要数据也是从原神各大网站搜集下来的,新建表结构并且将数据填充,我们简单看一下Bmob的后台。 数据准备好了,那就开始我们的Compose之旅。 首页UI绘制 整

Androidbye的博客 518

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android 自定义ImageView实现圆角

自定义圆角imageview

liuqinhou的博客 5133

给ImageView做圆角处理

Android 圆角ImageView

永远的魔术1号 2897

Android中实现ImageView圆角化的几种 方式

开发中我们经常在显示图片相关需求的时候需要加载圆角图片,下面几种方式来实现图片的圆角化。 1:第一种方式是本人比较推荐的,直接在需要加载的图片外部嵌套一层CardView控件来实现图片 的圆角化,因为写起来简单,而且在项目中可以使用第三方开源库如Glide,ImageLoader等来加载动态图之类的 不会出现什么问题,如果使用第3种方式来实现的话就很容易出问题。 <android.support.v7.widget.CardView android:id="@+id/img_item

AndyYuan317的博客 1万+

Android ImageView 设置圆角

RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(30));//图片圆角为30 Glide.with(getContext()).load(result.getImage()) //图片地址 .apply(options) ...

weixin_37077736的博客 1924

Android自定义ImageView圆角

在Android项目中经常遇见圆角的图片的展示问题,但是很可惜,Android中的imageView并不是原生就支持圆角的,那么在Android中实现展示圆角图片的方式有几种呢?这里笔者大致总结一下分为以下几种以上,其中2/3是借助其他图片加载库实现,1是需要自行实现ImageView中圆角的绘制函数,4需要布局多一层嵌套。 按照最简单的做法这里推荐使用CardView的方式实现圆角。但是有时候UI设计师的设计图总是不是很如开发的口味,会出现上边需要圆角,底部无圆角的设计需求,那么这是时候,直接使用自定义I

涛的博客 3732

[Android开发]不操作Bitmap实现圆角ImageView、圆形ImageView,支持添加背景圆形或圆角矩形边框、边框支持渐变色

[Android开发]不操作Bitmap实现圆角ImageView、圆形ImageView,支持添加背景圆形或圆角矩形边框、边框支持渐变色

u013077428的博客 2166

android 方式实现imageview圆角,开发这么久这些问题都不会

else {@Override// 圆角图片的范围/**初始化BitmapShader//给paint附加一个具有某种魔力(缩放)的shader*/return;// 将bmp作为着色器,就是在指定区域内绘制bmp;此构造方法用的是拉伸mode: clamp// 拿到bitmap宽或高的小值//我们需要画正方形// 如果图片的宽或者高与view的宽高不匹配,计算出需要缩放的比例;

m0_60567796的博客 1310
上一篇: Android 性能优化 之 插桩日志分析
Lucky_William
博客等级 码龄11年 161粉丝 57原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值