Android实现动态改变shape.xml中图形的颜色
在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实现动态改变shape.xml中图形的颜色就是小编分享给大家的全部内容了,希望能给大家一个参考。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- TypeScript 参数简化实战(进阶知识点conditional types,中高级必会)
- 最简实现Promise,支持异步链式调用(20行)
- 40行代码把Vue3的响应式集成进React做状态管理
- 写给女朋友的中级前端面试秘籍(含详细答案,15k级别)
- 写给初中级前端的高级进阶指南
- 为什么 Vue 中不要用 index 作为 key?(diff 算法详解)
- Vue3 的响应式和以前有什么区别,Proxy 无敌?
- 腾讯云TKE-PV使用cos存储案例: 容器目录权限问题
- Vue3 究竟好在哪里?(和 React Hook 的详细对比)
- 前端「N皇后」递归回溯经典问题图解
- 深入 TypeScript 中的子类型、逆变、协变,进阶 Vue3 源码前必须搞懂的。
- Vue3 + TypeScript 实现递归菜单组件
- TypeScript 4.1 新特性:字符串模板类型,Vuex 终于有救了?
- TS 4.1 新特性实现 Vuex 无限层级命名空间的 dispatch 类型推断。
- egg.js踩坑记录(一)开始篇