Android-ColorMatrixColorFilter处理图片灰度问题

偶尔需要处理灰度图等时候,并没有用两套图,而是使用一个图加 ColorMatrixColorFilter方式来处理。

比如给一个seekbar的thumb图片设置灰度:

//getResources().getDrawable方式获取图片
Drawable drawable=getResources().getDrawable(R.drawable.xx);
//创建过滤
ColorMatrix colorMatrix = new ColorMatrix();
            //0灰
           colorMatrix.setSaturation(0);
           colorfilterGrey = new ColorMatrixColorFilter ColorMatrixColorFilter(colorMatrix);
           //drawable设置ColorFilter
           drawable.setColorFilter(colorfilterGrey);
           //设置给seekbar的thumb
           seekbar.setThumb(drawable);

问题

那么问题来了,比如一个页面有4个seekbar,编号:A,B,C,D。

操作说明:进入该页面的时候,只给其中A设置了灰度,BCD均没有在java代码中设置,BCD的thumb是在xml布局文件中直接引用

现象:BCD的thumb也跟着A一起变灰了,what!而且更奇特的是,在BCD的thumb滑动的时候就自动恢复了原有的彩色

不卖关子:

  • 原因:getResources().getDrawable内部有对drawable做缓存,导致其他用到这个id的drawable的时候,使用到了缓存

  • 处理:drawable的来源不使用getResources().getDrawable,使用 BitmapFactory.decodeResource方式来获取。

对于BitmapFactory.decodeResource方式,可参考这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值