我有一个选择器,我将一个圆圈设置为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>
答案 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);
}
}