7

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

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

但这没有影响。我已经尝试了具有各种 Porter-Duff 模式的 setColorFilter 版本,但这些都不起作用。任何关于问题可能是什么或我可能缺少什么的想法将不胜感激。

4

2 回答 2

13

您必须从按钮中获取 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,drawableimageButton.getDrawable()对应于属性,android:src="..."imageButton.getBackground()对应于android:background="..."属性。确保在正确的可绘制对象上调用 setColorFilter。

于 2015-02-26T05:37:57.783 回答
2

派对迟到了,但以防万一其他人遇到这个问题

我发现如果您以编程方式创建 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);
    }
});
于 2018-04-01T05:35:59.333 回答