零
一、ColorFilter似个嘛
小德在做一个imageview点击会变暗的效果的时候设置的这个ColorFilter,类如其名,介就似个色彩过滤器,用的好的话能像美工一样ps你的imageview。
二、ColorFIlter用在哪
ImageView和Drawable里边都有SetColorFilter方法,但查看Imageview源码就发现在Imageview里边最后还是调用了Drawable的set方法,但是这里有个小坑,我们最后再看。
三、怎么用
ColorFilter有三个子类,我们一般用的就是这仨弟弟。
3.1 LightingColorfilter
首先我们看一下这个类的介绍。
R' = R * colorMultiply.R + colorAdd.R
G' = G * colorMultiply.G + colorAdd.G
B' = B * colorMultiply.B + colorAdd.B
虽然是两个参数但是上边的计算公式分别有三个值,colorMultiply.R/G/B和colorAdd.R/G/B的意思是颜色代码(十六进制)中的ARGB,也就是说#FFFFFFFF每两位对应的是A(Alpha,透明度)RGB。
(啊 话说小德最近中了RGB的毒
3.2 PoterDuffColorFilter
还是先看文档介绍
单一的颜色我们知道,但是这个PoterDuff似个嘛?(那张图他要lei了)
3.3 ColorMatrixColorFilter
重点来了,带矩阵的过滤器。还是先看文档:
四、回到标题,变暗
小德使用的是PoterDuffColorFilter,使用灰色过滤,选的模式是 PorterDuff.Mode.MULTIPLY
。
imageView.getDrawable().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
复制代码
话说点击就不用小德多说了吧。或者说变回来就clear掉colorfilter就好了。
imageView.getDrawable().clearColorFilter();
复制代码
五、还有那个坑呢
当时的问题是我最开始给drawable设置了colorfilter,当然也是clear了drawable的。但我发现了自己人写的工具类有这个设置colorfilter的方法,正好也是变暗的效果,我就直接用起来了。
但是之后就出现bug了,imageview设置图片的时候虽然我没点击(其实debug也发现根本没进入到ontouch里边)imageview,图片依然变暗了。最后才发现是工具类给imageview设置了colorfilter,但我clear的是drawable的,在imageview中其实还保存着之前的colorfilter,所以我重新设置图片的时候drawable就带上了之前的colorfilter。
所以,谨记给谁设置的colorfilter就清掉谁的,除非也想像小德一样用了一个下午找问题。
//作为Android开发的初学者,如果我有错误的地方或者不足的话欢迎大家指正。希望与大家一同进步。