【发布时间】:2015-01-28 09:53:34
【问题描述】:
在 Lollipop 设备上将 ColorFilter 与可绘制对象一起使用时,我遇到了一种奇怪的行为。
我正在尝试为整个应用程序更改某些可绘制对象的颜色。 我曾经通过在其上应用 ColorFilter 来做到这一点,然后当可绘制对象共享它们的 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 再次工作?
谢谢。
【问题讨论】:
标签: android drawable android-5.0-lollipop colorfilter