2016-07-30 107 views
0

我正在實施ListViewMultiModeListener,因此創建一個選擇器元素來突出顯示列表中選定的項目。自定義選擇器,背景顏色和android中的imageview

我的選擇看起來像:

<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中的選擇器一樣。從我能做的事情來看,有一個半透明的「前景」圖像,在其上方有一個檢查符號的圖標/圖像。我想知道如何創建這樣的自定義選擇器,以便在每個選定項目的頂部設置我的背景圖像和圖標。

我用Selector作爲前景元素在我的FrameLayout像這樣:

<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表明,我們只能在我們在我們的Selector定義item設置andoird:color屬性。我希望我錯了。

編輯 - 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不可見。

回答

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> 

一旦你設置繪製成ImageView,你可以調用imageView.setImageLevel(2)來選擇相應的圖像。你可以有你想要的水平。

0

來創建圖像的繪製,你應該使用以下設置背景顏色:

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