为什么这会改变颜色?

时间:2016-01-26 01:22:26

标签: java android xml android-layout

之前我问过如何将默认的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提供的星形画面将星形保持为黄色?

enter image description here

2 个答案:

答案 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等应用相同的逻辑。