Android ImageButton setColorFilter不工作

Ken*_*Ken 7 android android-imagebutton

我已经找到了回答这个问题的帖子,但是没有一个能为我工作,所以我认为我对它应该如何运作有一个根本的误解.我有一个ImageButton,它有一个png文件.除白色箭头外,png大多是透明的.我想用setColorFilter为箭头着色:

imageButton.setColorFilter(Color.argb(255, 225, 0, 0));
Run Code Online (Sandbox Code Playgroud)

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

Run*_*del 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);
Run Code Online (Sandbox Code Playgroud)

只要您对Drawable对象有正确的引用,

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

在其xml中:

<TextView
...
android:drawableLeft="..." 
...
 />
Run Code Online (Sandbox Code Playgroud)

你可以使用myDrawableObject.setColorFilter()来完全喜欢.

编辑:

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