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

Posted

技术标签:

【中文标题】android中具有背景颜色和imageview的自定义选择器【英文标题】:Custom selector with background color and imageview in android 【发布时间】:2016-12-05 06:34:28 【问题描述】:

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

我的选择器看起来像:

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

但是,我想要的理想状态如上图所示。就像 Whatsapp 中的选择器一样。据我所知,有一个半透明的“前景”图像,上面有一个复选符号的图标/图像。我想知道如何创建这样一个自定义选择器来设置我的背景图像和每个选定项目顶部的图标。

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

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

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

PS:查看Color State documentation 表明我们只能在item 中设置andoird:color 属性,这是我们在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 无论如何都不可见。

【问题讨论】:

【参考方案1】:

我想这可以使用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>

将可绘制对象设置为ImageView 后,您可以调用imageView.setImageLevel(2) 来选择相应的图像。您可以拥有任意多个级别。

【讨论】:

【参考方案2】:

要使用图像和背景颜色创建可绘制对象,您应该使用以下设置:

<?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>

【讨论】:

以上是关于android中具有背景颜色和imageview的自定义选择器的主要内容,如果未能解决你的问题,请参考以下文章

具有颜色和背景图像的按钮

Android imageview从缩放图像中获取像素颜色

android导航栏与状态栏颜色及透明度

旋转 Android ImageView 及其背景

android开发的textview和imageview有啥区别吗?

Android自定义圆角矩形ImageView,支持Glide加载图片及颜色填充