在Lollipop设备上使用ColorFilter和drawables时,我遇到了一个奇怪的行为 .
我正在尝试为整个应用程序更改某些drawable的颜色 . 我曾经通过在它上面应用ColorFilter来做到这一点,然后当drawables共享它们的ConstantState时,所有实例都被修改了 . 这对棒棒糖前设备非常有用 . 但是,当在棒棒糖设备上运行时,这似乎被破坏,并且修改只能应用于单个实例 . 这是一个简单的例子,可以在棒棒糖前工作,而不是之后:
int color = Color.BLUE;
Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.ic_launcher);
addContentView(iv, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
在棒棒糖前设备图像为蓝色,在棒棒糖后设备上,图像不变 .
这个例子适用于两者,但仅适用于该drawable的这个实例,而不是在其他地方重用它时:
int color = Color.BLUE;
Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
ImageView iv = new ImageView(this);
iv.setImageDrawable(drawable);
addContentView(iv, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
据我了解,这可能与Lollipop应用自己的ColorFilter的Tint效果相关联,但此处的ImageView无法点击 . 所以我尝试在我的drawable上应用setTint方法但没有成功 .
所以我的问题是在Lollipop版本的drawables的constantState上发生了什么,我怎样才能让我的snipnet再次工作?
谢谢 .
1 回答
对于ImageView,您可以使用以下代码更改颜色:
它适用于所有版本 .