Android笔记之ColorFilter:图片点击变暗

一、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开发的初学者,如果我有错误的地方或者不足的话欢迎大家指正。希望与大家一同进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值