文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-08-19 10:18

关注

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

  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" />        <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)指定圆角大小及边框样式

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个圆角的大小及边框样式

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

来源地址:https://blog.csdn.net/java_android_man/article/details/127115286

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯