• Android-ImageView自带的渲染方法


    引子

    开发中,经常遇到类似下面的需求:

    一个图片,正常是灰色,按下时是绿色。

    实现方法

    我们可以用写一个selector.xml,放到drawable,然后在设置src的时候,把selector放进去。

    如下按照3步走:

    第一步:

    第二步:将drawable设置给imageView的src

    第三步: java代码中将imageView设置一个点击监听(这步不能少,少了不生效!

     然后你就能看到下面的效果。

     

    但是这种方法,要求两张图。

    其实一定场景下,只用一张图也能实现类似效果。

     干货

    这是ImageView的源码,其中有一个setColorFilter()方法,注释翻译过来,就是,给image设置一个着色选项,只需要传入一个颜色int值即可。

    调用代码如下:

     

    看到的效果就是:

     

    左边是渲染之后的图,右边是没有渲染的图。

    有了这个方法,有些时候就不必找UI大佬切图了,自力更生有木有。

    ===================但是=============================

    这种做法有局限性。简单说就是,这个setColorFilter函数并不能替代selector,selector能做的事还是更多一点。

    setColorFilter只能把  这种图里面的有色部分,用指定的颜色重新着色。

    而其中的格子部分(格子表示透明),并不受影响。

    也就是说,setColorFilter可以将上面的图变成,而不能变成类似的这种填充效果。

    结语

    之所以写这一篇,是因为。我被这个setColorFilter坑过啊啊啊。UI大佬要求更换图标,只是换了个颜色,形状并未改变,我按照文件名称替换了,但是发现,运行起来,图片并没有被替换。

    翻了半天才发现(上古时代的代码,翻起来还是要一点时间的,囧)

    原来,源码里面,并没有用只用到了一张原始图,然后用setColorFilter渲染了另外一种颜色。

    浪费的时间不长不短,也有半天。

    写个博客加深印象。欧拉!

  • 相关阅读:
    Django中的syncdb命令
    notepad++下的字体设置
    python中的getattr函数
    python实现虚拟茶话会
    利用python爬取海量疾病名称百度搜索词条目数的爬虫实现
    SQL里面如何取得前N条数据?
    python中怎么查看当前工作目录和更改工作目录
    python中thread模块中join函数
    python中的自测语句是什么?
    python读取数据库数据有乱码怎么解决?
  • 原文地址:https://www.cnblogs.com/hankzhouAndroid/p/10119400.html
Copyright © 2020-2023  润新知