之前我问过如何将默认的android drawable star的颜色改为黄色而不是白色,我得到了一个答案:
Drawable drawable = getResources().getDrawable(android.R.drawable.btn_star);
drawable.setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
这是我的明星:
android:onClick = "star"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:background="@android:drawable/btn_star"
/>
但是,明星仍然是白色的(下图)为什么setColorFilter没有工作?当我点击它时,星星的边缘变成黄色......我怎样才能使用Android提供的星形画面将星形保持为黄色?
答案 0 :(得分:0)
将onclick侦听器更改为此
public void star (View object){
object.getBackground().setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
}
我相信android会为每个使用drawable的小部件创建一个特定的可绘制对象。
如果你问为什么让边缘发光变黄,只是它是这个drawable的默认主题,如果你删除你的代码,它仍然会在边缘发出黄光。
如果你想在加载时更改它,你可以在onCreate()中编写代码,如果你正在使用活动
View object = findViewById(R.id.object_id);
object.getBackground().setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
答案 1 :(得分:0)
你做错了。 您已在xml中设置背景。 比你在java中创建一个Drawable对象并在其上应用颜色过滤器。 这两者完全不同,完全没有联系。
这样做: (我假设你在布局xml中使用了ImageButton)
<ImageButton
android:id="@+id/imageButton"
android:onClick="star"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentTop="true" />
现在,在您的活动类的onCreate()方法中执行:
ImageButton btnStar = (ImageButton) findViewById(R.id.imageButton);
Drawable drawable = getResources().getDrawable(android.R.drawable.btn_star);
drawable.setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
btnStar.setBackground(drawable);
这会将修改后的drawable设置为ImageButton的背景。 您可以为Button,ImageView等应用相同的逻辑。