news 2026/8/27 18:48:20

Android开发 GradientDrawable详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android开发 GradientDrawable详解

前言

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

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

GradientDrawable使用方法
1. 获取控件的shape并进行动态修改:
既然GradientDrawable是shape的动态实现,那么他就可以通过动态的获取控件的shape获取实例并进行修改,
比如我的上一篇文章
android 动态生成shape以及动态的改变shape颜色

2. 通过代码动态创建:

//什么都不指定默认为矩形 GradientDrawable background = new GradientDrawable(); background.setColor(Color.GREEN); view.setBackgroundDrawable(background);

如果想要设置形状的话可以通过setShape(int shape) 方法来进行设置,这里一共可以设置四种形状:

GradientDrawable.RECTANGLE:矩形 GradientDrawable.OVAL:椭圆形 GradientDrawable.LINE:一条线 GradientDrawable.RING:环形(环形试了好久不知为何画不出来)

这里用GradientDrawable.OVAL来实验一下:

GradientDrawable background = new GradientDrawable(); background.setColor(Color.GREEN); background.setShape(GradientDrawable.OVAL); view.setBackgroundDrawable(background);

如果想让效果更加丰富一些添加描边或者颜色渐变:

GradientDrawable background = new GradientDrawable(); background.setShape(GradientDrawable.OVAL); background.setStroke(10,Color.RED);//设置宽度为10px的红色描边 background.setGradientType(GradientDrawable.LINEAR\_GRADIENT);//设置线性渐变,除此之外还有:GradientDrawable.SWEEP\_GRADIENT(扫描式渐变),GradientDrawable.RADIAL\_GRADIENT(圆形渐变) background.setColors(new int\[\]{Color.RED,Color.BLUE});//增加渐变效果需要使用setColors方法来设置颜色(中间可以增加多个颜色值) view.setBackgroundDrawable(background);

画线

GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.LINE); gradientDrawable.setStroke(5, Color.YELLOW);//线的宽度 与 线的颜色 mTextView.setBackground(gradientDrawable);

效果图:

画虚线

mTextView.setLayerType(View.LAYER\_TYPE\_SOFTWARE,null); //要显示虚线一定要关闭硬件加速 GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.LINE); gradientDrawable.setStroke(1, Color.BLACK, 10, 10);//第一个参数为线的宽度 第二个参数是线的颜色 第三个参数是虚线段的长度 第四个参数是虚线段之间的间距长度 mTextView.setBackground(gradientDrawable);

也可以在布局里关闭指定view的硬件加速

android:layerType="software"

效果图:

画圆

GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.OVAL); gradientDrawable.setColor(Color.BLUE); gradientDrawable.setSize(50,50); mTextView.setBackground(gradientDrawable);

效果图:

画圆环

GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.OVAL); gradientDrawable.setColor(Color.BLUE); gradientDrawable.setStroke(10,Color.YELLOW); gradientDrawable.setSize(50,50); mTextView.setBackground(gradientDrawable);

效果图:

圆角矩形

GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.RECTANGLE); gradientDrawable.setColor(Color.RED); gradientDrawable.setStroke(10,Color.BLUE); gradientDrawable.setCornerRadius(10); gradientDrawable.setSize(50,50); mTextView.setBackground(gradientDrawable);

效果图:

虚线矩形

GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.LINEAR\_GRADIENT); gradientDrawable.setStroke(1, Color.GREEN,30, 30); mTextView.setBackground(gradientDrawable);

效果图:

颜色渐变

线性渐变

int\[\] colors = {Color.YELLOW, Color.GREEN, Color.BLUE}; GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.RECTANGLE); gradientDrawable.setColors(colors); //添加颜色组 gradientDrawable.setGradientType(GradientDrawable.LINEAR\_GRADIENT);//设置线性渐变 gradientDrawable.setSize(50,50); mTextView.setBackground(gradientDrawable);

效果图:

改变线性渐变方向

int\[\] colors = {Color.YELLOW, Color.GREEN, Color.BLUE}; GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.RECTANGLE); gradientDrawable.setColors(colors); //添加颜色组 gradientDrawable.setGradientType(GradientDrawable.LINEAR\_GRADIENT);//设置线性渐变 gradientDrawable.setOrientation(GradientDrawable.Orientation.RIGHT\_LEFT);//设置渐变方向 gradientDrawable.setSize(50,50); mTextView.setBackground(gradientDrawable);

效果图:

半径渐变

int\[\] colors = {Color.YELLOW, Color.GREEN, Color.BLUE}; GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.RECTANGLE); gradientDrawable.setColors(colors); //添加颜色组 gradientDrawable.setGradientType(GradientDrawable.RADIAL\_GRADIENT);//设置半径渐变 gradientDrawable.setGradientRadius(50);//渐变的半径值 gradientDrawable.setSize(50,50); mTextView.setBackground(gradientDrawable);

效果图:

扫描渐变

int\[\] colors = {Color.YELLOW, Color.GREEN, Color.BLUE}; GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.RECTANGLE); gradientDrawable.setColors(colors); //添加颜色组 gradientDrawable.setGradientType(GradientDrawable.SWEEP\_GRADIENT);//设置扫描渐变 gradientDrawable.setGradientCenter(0.5f,0.5f);//渐变中心点 gradientDrawable.setSize(50,50); mTextView.setBackground(gradientDrawable);

防抖

gradientDrawable.setDither(true);

可以让渐变的时候颜色阶梯降低,变得更柔和

透明度

GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.setShape(GradientDrawable.RECTANGLE); gradientDrawable.setColor(Color.YELLOW); gradientDrawable.setAlpha(70);//设置透明度 mTextView.setBackground(gradientDrawable);

最后

Android开发 GradientDrawable详解到这了,需要更多Android开发的学习资料可以扫码免费领取!《架构师筑基必备技能》、《Android百大框架源码解析》、《Android性能优化实战解析》、《高级kotlin强化实战》、《Android高级UI开源框架进阶解密》、《NDK模块开发》、《Flutter技术进阶》、《微信小程序开发》。附全套视频资料,包含面试合集、源码合集、开源框架合集。

完整文档资料扫码领取

目录

一、架构师筑基必备技能

1.深入理解Java泛型 2.注解深入浅出 3.并发编程 4.数据传输与序列化 5.Java虚拟机原理 6.高效IO ……

二、Android百大框架源码解析

1.Retrofit 2.0源码解析 2.Okhttp3源码解析 3.ButterKnife源码解析 4.MPAndroidChart 源码解析 5.Glide源码解析 6.Leakcanary 源码解析 7.Universal-lmage-Loader源码解析 8.EventBus 3.0源码解析 9.zxing源码分析 10.Picasso源码解析 11.LottieAndroid使用详解及源码解析 12.Fresco 源码分析——图片加载流程

三、Android性能优化实战解析

1.腾讯Bugly:对字符串匹配算法的一点理解

2.爱奇艺:安卓APP崩溃捕获方案——xCrash

3.字节跳动:深入理解Gradle框架之一:Plugin, Extension, buildSrc

4.百度APP技术:Android H5首屏优化实践

5.支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」

6.携程:从智行 Android 项目看组件化架构实践

7.网易新闻构建优化:如何让你的构建速度“势如闪电”?

四、高级kotlin强化实战

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 18:44:30

Go 编译过程全景

Go 编译过程全景一、从 go build 到可执行文件:一张全景图 你敲下 go build,几秒钟后一个静态二进制文件就出现了。但在这几秒钟里发生了什么?Go 编译器(gc,注意不是 GC 垃圾回收,而是 Go Compiler 的缩写&…

作者头像 李华
网站建设 2026/8/27 18:41:47

基于DEAP数据集的脑电情绪识别:从特征工程到深度学习实战

简介:脑机接口(BCI)与情感计算是人工智能与神经科学交叉的前沿领域,其核心目标之一是让机器理解人类情绪。实现这一目标的关键在于从生理信号中提取有效的情绪表征,其中脑电图(EEG)因其高时间分…

作者头像 李华
网站建设 2026/8/27 18:40:29

鸿蒙开发入门:快速修复命令行调试开发指导

快速修复命令行调试开发指导 当前阶段,HarmonyOS为开发者提供了命令行的调试开发工具可供使用。比如,包名为com.ohos.quickfix的示例应用,版本号为1000000。该应用的当前版本运行中有某问题需要修复,此时,开发者可参考…

作者头像 李华
网站建设 2026/8/27 18:37:55

Android还得看Framework开发,你觉得呢?

在Android开发领域,主要有三个方向:应用开发、框架开发和Linux驱动开发。每个方向都有其独特的特点和就业前景。 应用开发(App Development) 是人数最多、门槛最低的领域。由于这个领域的技术要求相对较低,吸引了大量的…

作者头像 李华
网站建设 2026/8/27 18:31:46

用iPad协议搞wechat机器人稳如狗

搞微信私域,用WTAPI框架,稳得一批!兄弟们,搞微信私域最怕啥?不是没客户,是群多了、号多了、消息炸了,你一个人根本顶不住。最近后台一堆老哥私信我,问怎么搞个能自动回复、自动拉群、…

作者头像 李华