前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android实现动态改变shape.xml中图形的颜色

Android实现动态改变shape.xml中图形的颜色

作者头像
砸漏
发布2020-10-16 11:30:10
2.4K0
发布2020-10-16 11:30:10
举报
文章被收录于专栏:恩蓝脚本

在Android开发过程中我们常遇到将某个图形的颜色改变(例如用圆点的不同颜色来代表不同的状态)

像这样的需求,一般我们使用android的shape就可以实现,比如

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"? 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" 
  <size android:width="80dp" android:height="80dp"/ 
  <stroke android:width="10dp" android:color="#FF0000"/ 
  <solid android:color="#000"/ 
 
</shape 

如果有多种颜色,那么我们可以写多个这样的shape,然后去使用。but。。。这样似乎太麻烦了,如果有10几种颜色,文件可能巨多。因此下面介绍一种写法可以动态改变图形的颜色。

1、首先获取我们自定义的一个shape

val normal = ContextCompat.getDrawable(requireContext(), R.drawable.pw_calendar_isuue_mark_danger)

2、获取到后将其转换成GradientDrawable

val normalGroup = normal as GradientDrawable

主角就是GradientDrawable

3、通过GradientDrawable的一些属性来设置颜色等

normalGroup.setStroke(dip2px(10f),Color.BLUE) normalGroup.setColor(Color.CYAN) iv_2.background = normalGroup

改变原来shape的画笔宽度和颜色,改变填充色,然后给图形设置上背景

看看效果

补充知识:Android代码调整ImageView图标颜色

问题:只有一套图标,图标本身的内容比较简单,但是在不同场景下需要显示不同的颜色,且只改变图标颜色,不改变透明度

解法:通过如下参数构造ColorMatrix,进而构造ColorMatrixColorFilter,然后调用ImageView.setColorFilter()方法调整图标颜色

float[] m = { 0, 0, 0, 0, R, 0, 0, 0, 0, G, 0, 0, 0, 0, B, 0, 0, 0, 1, 0, };

涉及到的类和方法

ImageView.setColorFilter(ColorFilter); ColorFilter ColorMatrix ColorMatrixColorFilter

以上这篇Android实现动态改变shape.xml中图形的颜色就是小编分享给大家的全部内容了,希望能给大家一个参考。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档