Android ImageButton setColorFilter 不工作

Android ImageButton setColorFilter Not Working

我一直在寻找回答这个问题的帖子,但是 none 对我有用,所以我认为我对它应该如何工作有一个根本性的误解。我有一个 ImageButton,它应用了一个 png 文件。除了白色箭头外,png 大部分是透明的。我想用 setColorFilter 将箭头染成红色:

imageButton.setColorFilter(Color.argb(255, 225, 0, 0));

但这没有影响。我已经尝试过具有各种 Porter-Duff 模式的 setColorFilter 版本,但其中 none 都有效。任何关于问题可能是什么或我可能遗漏了什么的想法都将不胜感激。

您必须从按钮获取 Drawable,因为您尝试使用(在您的设置中)的 setColorFilter 适用于这些按钮。

ImageButton btn = (ImageButton) myLayout.findViewByID(R.id.my_button);

int mycolor = getResources().getColor(R.color.best_color);

btn.getDrawable().setColorFilter(mycolor, PorterDuff.Mode.SRC_ATOP);

只要正确引用了一个Drawable对象,

e.g. textView.getCompoundDrawables()[2].setColorFilter(...);

其中 xml:

<TextView
...
android:drawableLeft="..." 
...
 />

您可以根据自己的喜好使用 myDrawableObject.setColorFilter()。

编辑:

对于 ImageButton,imageButton.getDrawable() 的 drawable 对应于 android:src="..."imageButton.getBackground() 对应于 android:background="..." 属性。确保在正确的可绘制对象上调用 setColorFilter。

聚会太晚了,但以防万一其他人遇到这个问题

我发现如果您以编程方式创建 ImageView,请在设置滤色器之前使用 post()

不会工作:

ImageView imageView = new ImageView(this);
imageView.setColorFilter(Color.WHITE);

会工作

ImageView imageView = new ImageView(context);

imageView.post(new Runnable() {
    @Override
    public void run() {
        imageView.setColorFilter(Color.WHITE);
    }
});