Android - 更改Drawables的颜色

时间:2016-06-28 00:06:32

标签: android android-drawable

我有一个选择器,我将一个圆圈设置为state_selected = true的背景,但我想在单击该对象时更改颜色。我该怎么办?

这就是我的drawables的设置方式:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#D0021B"/>
<stroke android:width="2dp" android:color="#910012" />
<size
    android:width="50dp"
    android:height="50dp" />
<corners android:radius="50dp" />
</shape>

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/black" android:state_selected="false" />
<item android:drawable="@drawable/nav_circle" android:state_selected="true" />
</selector>

3 个答案:

答案 0 :(得分:0)

如果要在按下时更改颜色,可以使用state_pressed。

<item android:state_pressed="true"
      android:drawable="@color/pressedColor"/> <!-- pressed state -->
<item android:state_focused="true"
      android:drawable="@color/pressedColor"/> <!-- focused state -->
<item android:drawable="@color/colorPrimary"/>

你也可以在android:drawable属性下使用另一个drawable

<item android:state_pressed="true"
      android:drawable="@drawable/button_solid"/>

但是,如果要在按下时更改背景可绘制,可以将按钮背景更改为不同的xml可绘制

button.setBackground(getDrawable(R.drawable.selectorDrawable2));

答案 1 :(得分:0)

也许这会对你有所帮助:

i=(ImageView)findViewById(R.id.image);
    i.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            i.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP); 
        }
    });

ImageView xml代码:

<ImageView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="@drawable/nav_circle"
   android:layout_centerVertical="true"
   android:layout_centerHorizontal="true"
   android:id="@+id/image" />

答案 2 :(得分:0)

您可以通过编程方式执行此操作:

public static void colorDrawable(View view, int color) {
            Drawable wrappedDrawable = DrawableCompat.wrap(view.getBackground());
            if (wrappedDrawable != null) {
                DrawableCompat.setTint(wrappedDrawable.mutate(), color);
                setBackgroundDrawable(view, wrappedDrawable);
            }
        }

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static void setBackgroundDrawable(View view, Drawable drawable) {

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
        view.setBackgroundDrawable(drawable);
    } else {
        view.setBackground(drawable);
    }
}