零
一、ColorFilter似个嘛
小德在做一个imageview点击会变暗的效果的时候设置的这个ColorFilter,类如其名,介就似个色彩过滤器,用的好的话能像美工一样ps你的imageview。
二、ColorFIlter用在哪
ImageView和Drawable里边都有SetColorFilter方法,但查看Imageview源码就发现在Imageview里边最后还是调用了Drawable的set方法,但是这里有个小坑,我们最后再看。
三、怎么用
ColorFilter有三个子类,我们一般用的就是这仨弟弟。
接下来就来介绍这仨弟弟。3.1 LightingColorfilter
首先我们看一下这个类的介绍。
我们明白了这个类是用来模拟简单的光照影响,接收两个参数:一个叫做ColorMultiply,另一个是ColorAdd,他们的计算方式在文档中也说明了,而且颜色中的alpha通道关闭了,所以alpha的值不会影响到结果。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模式来改变source。 单一的颜色我们知道,但是这个PoterDuff似个嘛?(那张图他要lei了) 其实就是一种混合模式,这个类除了在colorfilter中使用还有其他用处,大家可以自己了解一下 (怎么可能因为小德还没整明白3.3 ColorMatrixColorFilter
重点来了,带矩阵的过滤器。还是先看文档:
重点就是那个4×5的矩阵来变换颜色。那具体怎么变换的呢: 矩阵相乘就是变换后的RGBA矩阵。 (没学好线代的小德跪了) 这个矩阵能做到什么事情就请咨询你们的美工吧,变个色只是基本操作。四、回到标题,变暗
小德使用的是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开发的初学者,如果我有错误的地方或者不足的话欢迎大家指正。希望与大家一同进步。