GradientDrawable:何时以及如何在 Android 中使用它

GradientDrawable的使用,和简单源码分析 gradient:英 [ˈgreidjənt] 美 [ˈgredɪənt] 倾斜度,坡度,变化率 从字面意思理解,是一个可以变化颜色、有渐变效果的Drawable GradientDrawable extends Drawable 来个效果图和对应的代码。并不复杂 对应代码(布局我就不写了,没有任何特别的) //圆角矩形。TextView rounded_rectangle.apply { var gradientDrawable: GradientDra 阅读详情

现代应用程序的 UI 越来越好。设计师正在尝试最适合 Android 应用程序的不同样式和组合。目前使用的 Android 的关键组件之一称为GradientDrawable。

GradientDrawable是可绘制的,具有用于按钮、背景等的颜色渐变。

让我们从在Android中创建一个具有水色背景的按钮的基本示例开始:


这可以简单地通过在 XML 中设置android:background属性来完成:

<Button
    android:layout_width="0dp"
    android:layout_height="48dp"
    android:layout_marginStart="24dp"
    android:layout_marginEnd="24dp"
    android:text="Continue"
    android:background="#00FFFF"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent" />

这里#00FFFF是 Aqua 颜色的颜色代码。

现在,如果你想要这样的东西怎么办:


为此,您需要使用渐变。

有两种方法可以做到这一点:

1. 在 XML 中使用可绘制资源

为此,在drawable包下,创建一个新文件tri_color_drawable.xml并输入以下代码:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <gradient
        android:angle="0"
        android:startColor="#D98880"
        android:centerColor="#F4D03F"
        android:endColor="#48C9B0"/>
</shape>

在这里,我们给出了一个标签并添加了三个颜色代码 - startColor、centerColor和endColor。我们还将角度指定为 0,表示左-右方向。

注意:角度只能是 45 的倍数。此外,在 XML 中最多可以指定 3 种颜色 - startColor、centerColor 和endColor。所有 3 将占据相同的空间。

然后在标记中进行更改以使其使用此背景可绘制对象:

android:background="@drawable/tri_color_drawable"

最后,运行应用程序!

2. GradientDrawable

我们也可以通过使用 GradientDrawable 以编程方式获得相同的功能。

在您的活动中,创建 GradientDrawable。

val gradientDrawable = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
    intArrayOf(
        0XFFD98880.toInt(),
        0XFFF4D03F.toInt(),
        0XFF48C9B0.toInt()
    ))

在这里,我们将方向指定为 LEFT_RIGHT(对应于我们之前在 XML 中添加的 0)。我们还给出了我们之前使用的相同的三种颜色。
接下来,将此 gradientDrawable 设置为按钮的背景。

val continueBtn: Button = findViewById(R.id.continue_btn)
continueBtn.background = gradientDrawable

现在运行应用程序!

那么,如果可以使用 XML 完成工作,为什么我们需要 GradientDrawable 呢?

让我们回顾一下前面的例子。

在这里,每种颜色都占据相等的空间。我们可以说颜色 1 从 0% 开始,颜色 2 在 ~33% 开始,颜色 3 在 ~66% 开始。如果您不希望所有颜色占据相同的空间怎么办?相反,你想要这样的东西:


如果您注意到这里,颜色 1 占据了整个空间的一半(50%),而其他两种颜色同样覆盖了剩余空间。(各占 25%)。

这不能通过 XML 实现。这就是GradientDrawable真正发挥作用的地方。

为了达到上述结果,我们可以这样做:

val gradientDrawable = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
    intArrayOf(
        0XFFD98880.toInt(),
        0XFFD98880.toInt(),
        0XFFF4D03F.toInt(),
        0XFF48C9B0.toInt()
    ))

这里颜色 1 使用了两次,因此它将占用总空间的 50%。剩余的两种颜色将同样占据剩余 50% 的空间。

再举一个例子,假设你想要一个 5 色渐变。


这也无法通过 XML 实现,但可以使用 GradientDrawable 轻松完成,如下所示:

val gradientDrawable = GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
    intArrayOf(
        0XFFD98880.toInt(),
        0XFFF4D03F.toInt(),
        0XFF48C9B0.toInt(),
        0XFF2C3E50.toInt(),
        0XFFAF7AC5.toInt()
    ))

在这里,我们给出了 5 种颜色,每种颜色将覆盖相同的空间。您可以根据需要提供尽可能多的颜色。

最后,让我们仔细看看 GradientDrawable 的主要组件:

1. 方向

它可以是枚举GradientDrawable.Orientation中定义的方向之一。在我们的示例中,我们使用了LEFT_RIGHT。其他可能的方向是TOP_BOTTOM、TR_BL、RIGHT_LEFT等。它们是不言自明的。

2. 颜色数组

这里我们需要提供一个十六进制颜色值的数组。

对于 0XFFD98880,

  • 0X - 表示一个十六进制数。
  • FF - 表示要应用于颜色的 alpha 值。Alpha 可以是 0 到 100。这里 FF 代表 100% alpha。
  • D98880 - 表示 RRGGBB 十六进制颜色值。

这就是关于如何在 Android 中使用 GradientDrawable 的全部内容。

希望这篇文章可以在你下次使用 GradientDrawable 时有所帮助。

如果大伙有什么好的学习方法或建议欢迎大家在评论中积极留言哈,希望大家能够共同学习、共同努力、共同进步。

小编在这里祝小伙伴们在未来的日子里都可以 升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰!!

不论遇到什么困难,都不应该成为我们放弃的理由!

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,需要一份小编整理出来的学习资料的关注我主页或者点击文末微信卡片免费领取~

这里是关于我自己的Android 学习,面试文档,视频收集大整理,有兴趣的伙伴们可以看看~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

Android GradientDrawable高级应用 以后完全用不上美工了 先看截图 1图为自定义的Textview 2、3图为点击效果 具体实现如下: 1. 定义自定义控件属性                                                                                                                 阅读详情

相关推荐

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法,其优势是减少插值误差(特别是龙格现象:表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。

平和少年的博客 1647

Android开发 GradientDrawable详解

Android开发 GradientDrawable详解

Android23333的博客 3158

k最近邻算法——电影分类及案例详解

如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。

ZhShy 4560

Android GradientDrawable

前言   GradientDrawable 支持渐变色的Drawable,与shapeDrawable在画型上是类似的,多了支持渐变色。代码上的GradientDrawable比在xml里的shape下gradient属性强大的多,因为shape下gradient属性只支持三色阶渐变,而GradientDrawable可以有更多的色阶渐变。 画线 GradientDrawable gradientDrawable = new GradientDrawable(); g

NewActivity的博客 1607

手把手带你搞懂电压跌落测试DIP

砖一用4分钟时间手把手带你搞懂电压跌落测试DIP,希望对你有用~

qq_45508321的博客 7924

AI漫剧实战:MiniMaxH3本地部署+ComfyUI工作流,6G显存出长视频

随着AI视频生成技术的普及,创作者开始追求在有限硬件条件下的本地化部署。本地部署不仅降低使用成本,更能获得对生成流程的完全可控性,这为高频次的内容生产提供了基础。以开源工作流引擎ComfyUI为依托,通过量化模型与显存优化,即便是6G显存的中端显卡也能流畅运行MiniMaxH3视频生成模型,输出60秒级别的AI漫剧片段。本文从视频生成原理出发,讲解模型选择、节点搭建、参数调优与提示词结构化设计,并延伸到剧本拆分、角色一致性控制、后期合成及平台变现路径,为AI漫剧创作者提供一套低成本、可复制的工程化方案。无论

weixin_29051149的博客 161

Android GradientDrawable(shape标签定义) 静态使用和动态使用(圆角,渐变实现)

Android GradientDrawable使用优势:   1. 快速实现一些基本图形(线,矩形,圆,椭圆,圆环)   2. 快速实现一些圆角,渐变,阴影等效果   3. 代替图片设置为View的背景   4. 可以减少apk大小,提升用户下载意愿   5. 还可以减少内存占用   6. 方便修改与维护   基于上面几种优势,我们很多时候都会选择使用android的sh...

amos1993的博客 567

【智驾与大模型】端到端与多模态大模型的精彩之旅

智驾和大模型的回顾与展望。开头的笔者自述也说了些心窝子话,边缘计算的监管刻不容缓!

仿生实验室:从0到1,制作人脸表情交互机器人,记录过程,软硬件全部开源,与君共襄盛举! 1321

在安卓系统中何时以及如何使用GradientDrawable

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,需要一份小编整理出来的学习资料的。所有 3 个将占用相等的空间。在这里,我们给出了一个标签,并添加了三个颜色代码 - 开始颜色,中心颜色和结束颜色。如果您在这里注意到,颜色 1 占据了整个空间的一半(50%),而其他两种颜色同样覆盖了剩余空间。在这里,我们给出了5种颜色,每种颜色将覆盖相等的空间。

m0_56144365的博客 340

机械臂抓取前言

机械臂相关的笔记

weixin_64037619的博客 3908

【异常】CNB提示The bill authorization scope cannot access the current request.

摘要:CNB API返回403错误,表明当前token的授权范围无法访问目标仓库。主要原因是:1) REPO_SLUG填写错误,导致资源地址不匹配;2) CNB_TOKEN未授权目标仓库;3) 账号账单状态异常。解决步骤:先检查REPO_SLUG是否与CNB平台仓库地址完全一致;再确认CNB_TOKEN是否绑定目标仓库且有读取权限;最后检查账号账单是否正常且覆盖目标资源。完成排查后更新配置即可解决此授权问题。

奶爸的编程之路,也就一周冷个三天 663

Android GradientDrawable静态使用和动态使用

Android GradientDrawable使用优势:   1. 快速实现一些基本图形(线,矩形,圆,椭圆,圆环)   2. 快速实现一些圆角,渐变,阴影等效果   3. 代替图片设置为View的背景   4. 可以减少apk大小,提升用户下载意愿   5. 还可以减少内存占用   6. 方便修改与维护   基于上面几种优势,我们很多时候都会选择使用android的shape,下...

老赵的地盘 1568

R语言 百度坐标转换至WGS84坐标

本文利用R语言封装了百度坐标转换至WGS84坐标的函数,亲测有效,提供了便捷的百度坐标转换方法。

qingchen98的博客 2135

Android Drawable之GradientDrawable

看了别人的博客 记录一下 GradientDrawable是什么 GradientDrawable在Android中便是shape标签的代码实现,利用GradientDrawable也可以创建出各种形状。  GradientDrawable 支持渐变色的Drawable,与shapeDrawable在画型上是类似的,多了支持渐变色。代码上的GradientDrawable比在xml里的shape下gradient属性强大的多,因为shape下gradient属性只支持三色阶渐变,而GradientDrawa

小白的博客 2264

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ShapeDrawable和GradientDrawable的简单使用

本篇博客是介绍Drawable的第十篇博客,主要介绍来了GradientDrawable和ShapeDrawable的简单使用。

朱玉强的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

安卓GradientDrawable使用方法

GradientDrawable _A Drawable with a color gradient for buttons, backgrounds, etc. _ 可用于按钮、背景等,拥有颜色渐变功能的图片资源 常用于xml file,由标签定义> for more information : > guide/topics/resources/drawable-resource.html _ 简单实现自定义View为button等组件作自定义形状效果 在xml定义使用 以xml文件名作d

qq_45797596的博客 802

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android gradientdrawable 参数,Android开发 GradientDrawable详解

前言GradientDrawable类似与Xml布局里的shape,常用在一些自己封装的对话框控件的背景或者其他View中,优势是不需要你在带着xml布局文件一起封包..画线GradientDrawable gradientDrawable =new GradientDrawable();gradientDrawable.setShape(GradientDrawable.LINE);gradie...

weixin_31629313的博客 781

Android GradientDrawable动态设置背景色、圆角

有时候需要改变shape中部分属性,比如下面代码,只想改变颜色,圆角不变 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:bottomLeftRadius="...

a day a better 6739

android gradientdrawable改变颜色没用,【Android Drawable系列】- Shape在代码中的使用GradientDrawable...

Android Drawable系列之前已经详细的说明过shape在xml中的属性和用法了,参考shape xml属性详解。shape是一个drawable的xml文件,下意识的会认为shape在代码中所所对应的类是ShapeDrawable,实际上代码中是GradientDrawable,所以本文的主角就是GradientDrawable了。GradientDrawable所有的set方法应该都...

weixin_42579969的博客 741

GradientDrawable 基础理解

GradientDrawable _A Drawable with a color gradient for buttons, backgrounds, etc. _ 可用于按钮、背景等,拥有颜色渐变功能的图片资源 常用于xml file,由标签定义> for more information : > guide/topics/resources/drawable-resource.html _ 简单实现自定义View为button等组件作自定义形状效果 在xml定义使用 以xml

m.t.u 2806

GradientDrawable修改颜色的正确使用方式

在Android开发过程中,难免要动态修改Drawable或Shape的形状或者颜色,通常我们都是转换成GradientDrawable对形状、颜色、渐变、角度等进行修改。但是偶尔你会发现,你所修改的shape资源的颜色会影响后续页面对应资源的的显示,无论是通过xml读取还是通过代码读取,图片的颜色都变了,这肯定不是我们想要的,那怎么办呢?别急... GradientDrawable.set...

3556
上一篇: 如何减少 Android 中的 APK 大小?
下一篇: 为什么Android应用程序会滞后?
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值