自定义选择器与android中的背景颜色和imageview

时间:2016-07-30 18:58:56

标签: android layout background imageview selector

我正在实施ListView MultiModeListener,因此会创建一个选择器元素来突出显示列表中的所选项目。

我的选择器看起来像:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true"
    android:drawable="@color/Thistle" />
</selector>

enter image description here

但是,我想要的理想状态如上图所示。喜欢Whatsapp中的选择器。从我所看不到的,有一个半透明的&#34;前景&#34;图像与图标/图像的复选符号在它上面。我想知道如何创建这样的自定义选择器,在每个选定项目的顶部设置我的背景图像和图标。

我在我的Framelayout中使用Selector作为前景元素,如下所示:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:padding="6dip"
android:foreground="@drawable/statelist_item_background">
....

我可以在我的FrameLayout上设置一个自定义选择器来实现这样的效果。如果根本不可能,我如何开始在我的MultiModeListener回调中以编程方式实施。

PS:看一下Color State documentation建议我们只能在我们andoird:color中定义的item中设置Selector属性。我希望我错了。

修改 - 1

尝试使用layer-list,如此:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true">
    <layer-list>
        <item>
            <bitmap android:gravity="center" android:src="@drawable/ic_done_white_24dp" />
        </item>
        <item android:drawable="@color/holo_purple" />
    </layer-list>
  </item>
</selector>

无法将android:drawable设置为#80000000等半透明色。但那并没有奏效。而bitmap无论如何都不可见。

2 个答案:

答案 0 :(得分:0)

我想这可以使用LevelListDrawable

来实现
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@color/img1"
        android:maxLevel="1"
        />
    <item
        android:drawable="@color/img2"
        android:maxLevel="2"
        />
    <item
        android:drawable="@color/img3"
        android:maxLevel="3"
        />    
</level-list>

将drawable设置为ImageView后,您可以致电imageView.setImageLevel(2)选择相应的图片。你可以拥有任意数量的关卡。

答案 1 :(得分:0)

要创建具有图像和背景颜色的drawable,您应该使用以下设置:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
     <item>
         <color android:color="@color/YourColor" />
     </item>

     <item>
         <bitmap android:gravity="center" android:src="@drawable/YourImage" />
     </item>

</layer-list>