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);
}
});
我一直在寻找回答这个问题的帖子,但是 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);
}
});