偶尔需要处理灰度图等时候,并没有用两套图,而是使用一个图加 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方式,可参考这里