Android 图标动态着色--DrawableCompat

2022-07-19  本文已影响0人  逃离_102

说明

在Android开发中,皮肤是很常见的功能,皮肤更改时,一些小的图标也要求改变颜色;还有就是滑动或者其他操作改变背景色等操作时也有改变图标颜色的需求,这些都是经常遇到的问题,这时候DrawableCompat,就出场了(当然你也可以用多个切图来代替,但是这样做太过麻烦,不利于包体积)。
DrawableCompat是Drawable的兼容包中的工具类,并且对低版本的手机有很好的兼容效果,使用它是比较安全的。

DrawableCompat常用API

public 方法

我们常用的就3个:wrap(Drawable drawable);setTint(Drawable drawable, int tint);setTintList(Drawable drawable, ColorStateList tint)

示例1

private void imgTint(ImageView iv,int colorRes){
  Drawable orig=iv.getDrawable();
  Drawable wrap=DrawableCompat.wrap(orig).mutate();
  //将Drawable重新着色
  DrawableCompat.setTint(wrap,colorRes);
  iv.setImageDrawable(wrap);
}

细心的小伙伴,已经发现了mutate方法,使用这个方法,可以让一个应用中使用同样的图片的地方不受影响,因为默认情况下,相同的图片资源是被共享同一种状态的。如果修改了一个实例的状态,那么其他使用这个实例的地方都会被修改。因此这个方法的作用就是让其他地方不受影响,这个方法记得加,不然会有很多莫名其妙的坑,都不知道那来的。

示例2

private void imgTint(ImageView iv,ColorStateList colorList){
  Drawable orig=iv.getDrawable();
  Drawable wrap=DrawableCompat.wrap(orig).mutate();
  //将Drawable重新着色
  DrawableCompat.setTint(wrap,colorList);
  iv.setImageDrawable(wrap);
}

ColorStateList的使用可以参考:Android ColorStateList,StateListDrawable--动态选择器;setTintList(Drawable drawable, ColorStateList tint)可以用单张图片实现选择器效果。

就说到这了,有什么不对的地方,欢迎指正,有什么没说全的,欢迎讨论留言

上一篇下一篇

猜你喜欢

热点阅读