setColorFilter不工作

Tim*_*nen 38 android imageview colorfilter

我正在尝试在imageview上实现一个简单的colorfilter,将黑色图像转换为白色图像.为了实现这一点,我做了以下事情:

    weatherImg.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY);
    weatherImg.setImageResource(R.drawable.b_clouded_rain);
Run Code Online (Sandbox Code Playgroud)

我也尝试将滤色器中的颜色更改为红色和白色,但所有这些都没有效果,我做错了什么?

Tim*_*nen 84

尽管我不愿意回答我自己的问题但我发现了问题:我应该使用:

   weatherImg.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)

  • `PorterDuff.Mode.SRC_ATOP`它是默认使用的那个,`weatherImg.setColorFilter(Color.WHITE)`也可以;) (8认同)

jsi*_*era 26

这取决于您要应用的过滤类型.如果你想在带有透明胶片的图像上应用新颜色,那对我有用:

weatherImg.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
Run Code Online (Sandbox Code Playgroud)

如果你想了解更多有关这个PorterDuff过滤器的信息,我发现了一篇帮助我理解的goog文章:http://www.ibm.com/developerworks/java/library/j-mer0918/给它一个读:)


Kon*_*pko 18

在Android 6上有同样的问题.通过使用ImageView.getDrawable().setColorFilter()而不是解决ImageView.setColorFilter().


Raf*_*ael 6

我们使用这个代码

Drawable drawable = DrawableCompat.wrap(getDrawable(drawableResource));
        drawable.mutate();
        DrawableCompat.setTint(drawable, getColor(color));
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

public static int getColor(int id) {
        return ContextCompat.getColor(getInstance().context, id);
    }

public static Drawable getDrawable(int id) {
        return ContextCompat.getDrawable(getInstance().context, id);
    }
Run Code Online (Sandbox Code Playgroud)


sty*_*972 5

对我来说,简单地调用setColorFilter()ImageView不能正常工作。

imageView.setColorFilter(ResourcesCompat.getColor(resources, color, null)) //didnt work on 21, only 22+
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,在 API 21 上,我可以setColorFilter()正常工作的唯一方法是将更改发布到视图消息队列。

imageView.post { imageView.setColorFilter(ResourcesCompat.getColor(resources, color, null)) } //this works on 21+
Run Code Online (Sandbox Code Playgroud)