首页 文章

Android Lollipop - Drawable的ColorFilters中的更改

提问于
浏览
0

在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 回答

  • 1

    对于ImageView,您可以使用以下代码更改颜色:

    imgView.setColorFilter(iconColor, Mode.MULTIPLY);
    

    它适用于所有版本 .

相关问题