Android UI动态设置带有Stroke渐变色背景Drawable
作者:AiLo 时间:2023-12-02 15:44:56
摘要
每天一个UI小技巧,提高开发效率 UI开发中繁琐的drawable xml开发,不同的view背景样式一致,却因为部分设计区别,就要重新写一套新的xml drawable,写还是不写?写的越多冗余代码越多,就因为改了一点小小的高度?
代码中设置Stroke渐变
实际效果如下
代码实现
class StrokeGradientLRDrawable(colors: IntArray,
radius: Float,
strokeWidth: Float) : ShapeDrawable() {
init {
// 外部矩形弧度
val outerR = floatArrayOf(radius, radius, radius, radius, radius, radius, radius, radius)
// 内部矩形与外部矩形的距离
val inset = RectF(strokeWidth, strokeWidth, strokeWidth, strokeWidth)
// 内部矩形弧度
val innerRadius = radius - strokeWidth
val innerRadii = floatArrayOf(innerRadius, innerRadius, innerRadius, innerRadius, innerRadius, innerRadius, innerRadius, innerRadius)
val rr = RoundRectShape(outerR, inset, innerRadii)
shape = rr
shaderFactory = object : ShaderFactory() {
override fun resize(width: Int, height: Int): Shader {
return LinearGradient(0f, 0f, width.toFloat(),
0f, colors, null, Shader.TileMode.CLAMP)
}
}
}
}
Drawable很简单,三个参数。
渐变的颜色数组; 圆角半径; Stroke的线条宽度
如何使用
如果达到图一的效果,即半径恰好为高度的一半,只需要把radius设置为一个更大的值即可。给个1000就行了
view.background = StrokeGradientLRDrawable(intArrayOf(Color.RED, Color.BLUE), 1000f, 5f)
普通的圆角就设置值就好了
view.background = StrokeGradientLRDrawable(intArrayOf(Color.RED, Color.BLUE), 50f, 5f)
来源:https://juejin.cn/post/7078955592382939149
标签:Android,UI,Stroke,动态设置,渐变背景
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
详解Idea 2019.2 安装lombok插件失效问题解决
2023-05-01 09:22:59
![](https://img.aspxhome.com/file/2023/3/64203_0s.jpg)
详解java中static关键词的作用
2023-12-02 00:32:00
![](https://img.aspxhome.com/file/2023/7/125567_0s.png)
Android自定义双向滑动控件
2022-04-30 04:11:18
![](https://img.aspxhome.com/file/2023/8/98658_0s.jpg)
android中SQLite使用及特点
2023-07-24 23:33:28
![](https://img.aspxhome.com/file/2023/5/126675_0s.png)
详解C#中的定时器Timer类及其垃圾回收机制
2021-07-21 10:57:39
Android 在viewPager中双指缩放图片双击缩放图片单指拖拽图片的实现思路
2021-12-09 14:04:22
DataGridView不显示最下面的新行、判断新增行、删除行操作
2022-11-26 16:14:36
java线程间通信的通俗解释及代码示例
2023-12-06 18:04:43
Junit测试多线程无法得到结果的问题解决
2023-01-01 22:12:52
![](https://img.aspxhome.com/file/2023/5/71195_0s.png)
Java 实战练手项目之医院预约挂号系统的实现流程
2023-11-24 00:42:36
![](https://img.aspxhome.com/file/2023/8/62528_0s.jpg)
java不可逆加密算法之md5加密算法使用示例
2023-07-25 09:43:36
wenserver获取天气预报数据实例分享
2021-07-22 14:22:52
基于Android实现桌面悬浮清内存app概述
2023-05-02 22:56:35
Android 模仿iPhone列表数据View刷新动画详解
2021-10-05 07:57:47
![](https://img.aspxhome.com/file/2023/2/120162_0s.gif)
Spring Bean自动装配入门到精通
2023-11-03 07:29:09
Java 中普通代码块,构造代码块,静态代码块区别及代码示例
2022-07-03 03:54:21
C#利用iTextSharp组件给PDF文档添加图片/文字水印
2021-11-03 20:18:31
Android使用JobScheduler定期推送本地通知实例代码
2023-07-26 22:43:28
java使用OGEngine开发2048
2023-07-23 06:07:43
Mybatis SqlSessionFactory与SqlSession详细讲解
2021-12-24 22:42:56
![](https://img.aspxhome.com/file/2023/6/62086_0s.png)