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渲染了另外一种颜色。

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

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

 

posted @ 2018-12-14 14:48  波澜不惊x  阅读(1141)  评论(0编辑  收藏  举报