欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

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

时间:2020-12-12 09:25:55|栏目:Android代码|点击:

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

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

<?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实现环形进度条

栏    目:Android代码

下一篇:Android手机获取IP地址的两种方法

本文标题:Android实现动态改变shape.xml中图形的颜色

本文地址:http://www.codeinn.net/misctech/31934.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有