【问题标题】:Custom selector with background color and imageview in androidandroid中具有背景颜色和imageview的自定义选择器
【发布时间】: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_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 表明我们只能在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 无论如何都不可见。

【问题讨论】:

    标签: android layout background imageview selector


    【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-10
        • 2014-02-11
        • 1970-01-01
        • 2017-04-14
        • 1970-01-01
        • 2018-12-12
        • 2013-05-27
        相关资源
        最近更新 更多