android – 如何让imageview的选择器只改变背景但不改变图像源?

我有一个带有图像src和背景颜色的ImageView.

此图像是布局,即gridview项布局.

我想创建一个xml选择器,当选择项目时,图像背景会改变,但图像src不会改变.

类似于android的主菜单与图标与文本,我想只突出图像.

我不会为对象的每个状态制作图像,我只想更改背景.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/img_0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:background="@drawable/selector_categorie"
        android:src="@drawable/ic_launcher"/>

    <TextView
        android:id="@+id/text_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/img_0"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/text_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_1"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/text_3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_2"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceMedium" />


</RelativeLayout>

解决方法:

这可以通过StateListDrawable来实现.

创建背景可绘制资源,例如item /background.xml,在/ drawable文件夹中,包含如下内容:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@color/color1" android:state_pressed="true"/>
  <item android:drawable="@color/color2" android:state_selected="true"/>
  <item android:drawable="@color/color3" android:state_activated="true"/>
  <item android:drawable="@color/color4"/>
</selector>

然后在/values/colors.xml文件中提供颜色值:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="color1">#DDff8800</color>
  <color name="color2">...</color>
  <!-- more colors... -->
</resources>

最后,使用android:background =“@ drawable / item_background”将可绘制资源设置为布局中的项目背景.

src图像保持不变.

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...