同一个图标,但是可能会有多种背景颜色。比如,标识空气质量的图标,因空气质量有多种情形,对应的图标就有多种背景颜色。

实现这种需求有两种方式:

1、针对每一种情形,切一张对应的图标。

2、只切一张图标,根据条件改变图标颜色。

第一种方式就很简单,直接根据条件设置对应的图标就好 —— imageView.setImageResource(iconRes)

这里着重介绍一下第二种实现方式。

源图标

1、通过setColorFilter实现

这种方式最简单  ——  cityWeatherBinding?.ivAirNum?.setColorFilter(aqiIconColor)

代码只是改变颜色,在xml布局中需要设置源图标。

<ImageView
                    android:id="@+id/iv_air_num"
                    android:layout_width="@dimen/dp_16"
                    android:layout_height="@dimen/dp_14"
                    android:src="@drawable/ic_icon_aqi"/>

2、通过DrawableCompat实现

//图标需要改变的颜色

val up = ContextCompat.getDrawable(context!!,R.drawable.ic_icon_aqi);

if (up != null) {

val drawableUp = DrawableCompat.wrap(up)

DrawableCompat.setTint(drawableUp, ContextCompat.getColor(context!!, aqiIconColor))

cityWeatherBinding?.ivAirNum?.setImageDrawable(drawableUp)

}

3、通过VectorDrawableCompat实现

需要使用svg格式的图标

ic_icon_air.xml如下

<vector android:height="24dp" android:viewportHeight="36"android:viewportWidth="36" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"><path android:fillColor="#7ACC7A" android:fillType="nonZero"android:pathData="M10.0284,32C7.6297,31.8532 6.376,31.1095 5.7318,30.2835C5.8552,28.2734 6.213,25.7695 7.218,23.4972C7.794,22.1961 8.6122,21.0178 9.6152,20.1522C10.7122,19.1203 11.7257,18.3256 12.7468,17.6709C14.7625,16.3865 16.5308,15.8267 17.0907,15.6295C17.6563,15.4416 18.6712,15.0884 19.8997,14.6954C21.1238,14.3343 22.6067,13.8122 23.8723,13.1741C26.4674,11.9528 28.6183,10.5749 28.6145,10.5744C28.6193,10.5749 26.3192,11.6719 23.6474,12.582C22.2994,13.0767 20.9218,13.4021 19.6362,13.6581C18.3706,13.9379 17.3023,14.2232 16.7137,14.4189C15.6135,14.8143 9.021,16.6297 5.6536,22.7152C4.8921,24.2693 4.4142,25.8772 4.1049,27.3838C3.3434,27.0144 2.3961,26.2985 2.1379,24.9744C1.6881,22.6668 1.9383,15.7435 9.2292,11.8975C16.5208,8.0515 24.6609,8.8202 28.5564,7.6923C32.4518,6.5645 34,4 34,4C34,4 30.7541,30.103 10.0284,32Z"android:strokeColor="#00000000" android:strokeWidth="1"/>
</vector>

//使用svg格式图片,然后动态改变背景色
         vectorDrawableCompat = VectorDrawableCompat.create(it.resources, R.drawable.ic_icon_air, it.theme)

vectorDrawableCompat?.let {

it.setTint(ContextCompat.getColor(CommonManager.getBaseContext(), aqiIconColor))

cityWeatherBinding?.ivAirNum?.setImageDrawable(it)

}

注:第三种方式可能会出现异常:android.content.res.Resources$NotFoundException。

    android.content.res.Resources$NotFoundException: File res/drawable-xxhdpi-v4/ic_icon_air.png from xml type xml resource ID #0x7f07006cat android.content.res.Resources.loadXmlResourceParser(Resources.java:3289)at android.content.res.Resources.loadXmlResourceParser(Resources.java:3244)at android.content.res.Resources.getXml(Resources.java:1486)at android.support.graphics.drawable.VectorDrawableCompat.create(VectorDrawableCompat.java:646)at com.xxx.mvvm.viewModel.CityWeatherViewModel.<init>(CityWeatherViewModel.kt:62)at com.xxx.home.module.main.CityWeatherFragment.getViewModel(CityWeatherFragment.kt:133)at com.xxx.home.module.main.CityWeatherFragment.getViewModel(CityWeatherFragment.kt:67)at com.xxx.common.app.BaseVMFragment.onCreateView(BaseVMFragment.kt:30)at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2243)at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:654)at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:168)at android.support.v4.view.ViewPager.populate(ViewPager.java:1244)at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:669)at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:631)at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:1086)at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:3097)at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:291)at com.xxx.home.module.main.HomeFragment.notifyDataChanged(HomeFragment.kt:123)at com.xxx.home.module.main.HomeFragment.performDataRequest(HomeFragment.kt:116)at com.xxx.common.app.KiiBaseFragment$onViewCreated$1.run(KiiBaseFragment.kt:59)at android.os.Handler.handleCallback(Handler.java:815)at android.os.Handler.dispatchMessage(Handler.java:104)at android.os.Looper.loop(Looper.java:207)at android.app.ActivityThread.main(ActivityThread.java:5975)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

android改变图标颜色相关推荐

  1. android 改变图标颜色

    有时ui给了我们一个图标的颜色,但是我们需要另一种颜色,这个时候我们可以通过代码来改变图标的颜色 使用imageview.setcolorFilter(int color)即可达到效果,但是有几点需要 ...

  2. android 动态改变图标颜色

    关键点 获取目标图标的所有像素点 验证像素点的alpha值,是否透明 在不透明的像素点上修改为我们想要的颜色 根据输入的颜色值改变图标颜色 final EditText et = findViewBy ...

  3. mpvue微信小程序中使用svg图标,并通过代码动态改变图标颜色

    微信小程序,mpvue中使用svg图标,并通过代码改变图标颜色 本文主要是mpvue开发小程序的代码,不过微信小程序原生开发应该也是一样的,思路都是通用的,按照这个思路微信小程序原生开发一样可以实现同 ...

  4. 改变图标颜色_LOL设计师宣布修改装备图标:提高清晰度、颜色差异化

    在11月12日,英雄联盟更新到了最新的季前赛版本.这次官方除了对部分英雄进行改动,主要是对于装备的图标和属性进行了更新.而在图标更新后,很多装备的样子都发生了很大的变化. 这也导致很多老玩家在进游戏后 ...

  5. vue通过返回值来判断图标的显示/隐藏,改变图标颜色

    在表格中通过后台返回数据来判断图标的变化 方法1: 如上,后台返回的status=1为已阅,status=0为未批阅,已阅则显示绿色的图标,我这里是用vue+elementui来实现的: <el ...

  6. Qt 如何改变图标颜色

    1. 下载图标 要实现图标修改颜色的功能需要去阿里巴巴矢量图标库选择自己需要的图标(网站:阿里巴巴矢量图标库),将需要的图标添加入库,如下 加入后,去右上角点击购物车图标,把代码下载下来解压,然后打开 ...

  7. android 修改图标颜色

    因为项目需求,需要把一部分不支持功能的小图标置灰. 拿到需求就开始找度娘,网上普遍说法是使用ColorMatrix进行setSaturation将饱和度设为0即可,但是我不知道是什么原因,可能我的图片 ...

  8. 【PS】改变图标颜色

    步骤 1.选中图片 ctrl+鼠标点击界面右侧图层中的小图 2.选中图层 鼠标点击界面右侧图层 3.1使用图标前景色 Alt+Del 3.2使用图标后景色 Ctrl+Del

  9. 文本框获得焦点后改变图标颜色,边框颜色等样式

    https://www.cnblogs.com/coco1s/p/9406413.html

最新文章

  1. C++描述杭电OJ 2012.素数判定 ||
  2. Entity Framework 学习中级篇2—存储过程(上)(转)
  3. 用事件驱动编程解救臃肿的代码
  4. java 反射data类型_java反射机制系列之初识Java Reflection
  5. FPGA控制AD7768采集
  6. 微课|中学生可以这样学Python(例4.2):打印九九乘法表
  7. java uml Rose_Rational Rose与UML教程
  8. 学计算机的能看出批图吗,P过的图片能看出来吗?给你4个鉴别方法!
  9. uniapp上传华为应用市场,您的应用提示获取手机存储敏感权限,用户不同意时强制退出应用
  10. 软件定义网络实验之SDN网络简单管理及开发
  11. ai描边工具怎么打开_AI描边工具命令讲解,教你ai描边功能实用技巧
  12. 安装RapidDesign_v1.3.0.Cracked.DX10.3.Rio
  13. ROS1云课→20迷宫不惑之A*大法(一种虽古老但实用全局路径规划算法)
  14. JSON是什么,有什么用,怎么写json
  15. 移动支付线下大战,支付宝还能做什么
  16. 我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福
  17. java gb18030 转 utf-8_gb18030与utf-8
  18. 【微软算法面试高频题】俄罗斯套娃信封
  19. MVC(Model View Controller)模型-视图-控制器
  20. 喷泉模型fountain model

热门文章

  1. I2C 子系统(二):I3C spec
  2. pythonipo模型_【python量化】Fama-French三因子回归A股实证(附源码)
  3. 云安全高等教育改革示范教材
  4. 南京大学周志华教授综述论文:弱监督学习
  5. 时间转化,多少分钟前,多少秒前
  6. 尚硅谷 Ajax与Axios的使用与关键源码 笔记
  7. 网红文字时钟手机版来了!安卓手机和苹果手机都可以使用!
  8. RuntimeError: wrapped C/C++ object of type QPushButton has been deleted
  9. MIUI 强制跳过 关闭 打开 小米手机 USB安装 USB安全 USB安全设置 应用确认
  10. com.google.protobuf.ServiceException: java.lang.NoClassDefFoundError: com/yammer/metrics/core/Gauge