Android Tint的简单使用

作者: 牙锅子 | 来源:发表于2016-10-14 08:46 被阅读313次

Android Tint的简单使用

如果要实现下图效果,第一时间想到的是让 UI 切图,第二时间想到的是自己会被 UI 打死,第三时间想到的是自己会被命名累死。
![屏幕快照 2016-10-13 下午9.58.26](http://odsdowehg.bkt.clouddn.com/屏幕快照 2016-10-13 下午9.58.26.png)

那么,这该如何快速高效的实现呢? 其实 Android 已经替我们想好了,那就是 Android Tint。Tint 意为着色器,即给图片上色。这样做的好处就是,你不需要再做一张图片,在 APK 包中最占大小的就是图片了,使用 Tint 可以大大减小包大小。

上图只是在 GridView 中展示 ImageView ,随机生成颜色给原始图片 ic_android_black_24dp 着色而已,资源图片下载自 Android Meterial Icons

这里我们使用 support-v4 包中的 DrawableCompat 来实现着色,核心代码如下:

/**
* 给 drawable 着色
*
* @param drawable 需要着色的 drawable 对象
* @param colors   ColorStateList 对象,代表需要着色的颜色
* @return
*/
public static Drawable tintDrawable(Drawable drawable, ColorStateList colors) {
   //这里需要对 drawable 对象执行 mutate() 操作
   //该操作能防止一个屏幕里多次使用同一个图片,对其中一个图片操作时影响其他图片
   //当然,你也可以在getResource().getDrawable()的时候就执行
   final Drawable wrappedDrawable = DrawableCompat.wrap(drawable.mutate());
   DrawableCompat.setTintList(wrappedDrawable, colors);
   return wrappedDrawable;
}

注1:如果使用项目中自带的 ic_launcher.png 使用着色器会使部分细节消失,具体原因不明,留待研究。
注2:ImageView 的 adjustBounds 属性的应用场景有待研究。

如果要实现图片的按压,或者选中效果,同样可以使用 tint 来实现。只需要定义一个 selector.xml 即可

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/colorAccent" android:state_pressed="true" />
    <item android:drawable="@color/colorPrimary" />
</selector>
ImageView image = (ImageView) findViewById(R.id.iv);
Drawable drawable = getResource().getDrawable(R.mipmap.ic_android_black_24dp);
ColorStateList colors = ColorStateList.valueOf(R.drawable.selector);
image.setBackgroundDrawable(tintDrawable(drawable,colors));

具体的点击效果这里就不展示了,大家可以去尝试一下。

相关文章

  • Android Tint的简单使用

    Android Tint的简单使用 如果要实现下图效果,第一时间想到的是让 UI 切图,第二时间想到的是自己会被 ...

  • Android Tint 使用

    关注了许多Android方面的公众号,有好几个公众号在不同时间段推送了关于Tint的使用;因此一直记在心上,最近终...

  • Android tint的使用

    底部栏的图标颜色就是通过tint切换的 而不是用两张图片替换 这样更节省app的空间 在点击切换时 把选中那项的t...

  • Android tint着色(优化,减小apk体积)

    参考 1、Android-使用tint一张图制作selector2、探索Android Material Desi...

  • 浅谈 Android L 的 Tint(着色)

    浅谈 Android L 的 Tint(着色) Tint 是什么? Tint 翻译为着色。 着色,着什么色呢,和背...

  • 在代码中实现android:tint效果

    2016-11-30遇到的一点小问题 Android着色效果tint Android有个tint的着色效果,这样有...

  • Tint使用

    概念 Tint,即着色,API 21之后,Android支持可以给对应的Drawable着上特定的颜色。使用着色,...

  • Android tint属性

    android:tint,android:tintMode:作用于ImageView,对ImageView内的mD...

  • Android Tint

    看了几篇关于tint的文章,各有千秋,今天总结了一下。如果想要兼容6.0以下版本,要用代码的方式来着色。

  • 探索Android Material Design 中的Tint

    很多天以前看到鸿洋大神公众号推出的一篇文章:安卓着色器(tint)使用实践,开始接触Tint这个属性,Tint翻译...

网友评论

    本文标题:Android Tint的简单使用

    本文链接:https://www.haomeiwen.com/subject/khegyttx.html