2016-07-30 3 views
0

Я реализую ListViewMultiModeListener и, следовательно, создаю элемент селектора, чтобы выделить выбранные элементы в списке.Пользовательский селектор с цветом фона и представлением изображения в android

Мой селектор выглядит примерно так:

<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 предполагает, что мы можем установить только andoird:color атрибут в item, что мы определяем в нашем Selector. Надеюсь, я ошибаюсь.

Edit - 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> 
Смежные вопросы