android改变图标颜色

您所在的位置:网站首页 手机桌面图标颜色变深 android改变图标颜色

android改变图标颜色

2024-06-01 04:43| 来源: 网络整理| 查看: 265

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

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

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

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

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

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

 

      源图标

        

 

      1、通过setColorFilter实现

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

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

             

 

      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如下

         //使用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 #0x7f07006c at 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.(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)

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3