2013-11-13 2 views
5

Для пользовательской реализации AdapterView я хотел бы добавить наложение цветов к выбранным элементам. Как добавить наложение цвета на дочерний элемент моего адаптера?Наложение цвета на вид

+0

http://stackoverflow.com/questions/14023886/android-button-selector/14024007#14024007 –

+0

Я не хочу, чтобы изменить фон дочерних элементов. Я хотел бы добавить наложение цвета. Также это должно быть общим солотием, поскольку я не знаю, какой тип представления представляет ребенок. – multiholle

+0

Затем поставьте «CustomView» или «ImageView» поверх вашего списка списка. Когда выбрано, просто измените цвет «CustomView» или «ImageView». –

ответ

5

ОК, я сделал еще несколько исследований. Это то, что я наконец придумал:

// prepare a gray filter setting saturation to 0, or ... 
ColorMatrix cm = new ColorMatrix(); 
cm.setSaturation(0); 
Paint paint = new Paint(); 
ColorFilter filter = new ColorMatrixColorFilter(cm); 

// ... prepare a color filter 
ColorFilter filter = new PorterDuffColorFilter(Color.rgb(34, 136, 201), PorterDuff.Mode.OVERLAY); 

// create paint 
paint.setColorFilter(filter); 


// override dispatchDraw of the view 
@Override 
protected void dispatchDraw(Canvas canvas) { 
    if (isPressed()) { 
     canvas.saveLayer(null, paint, Canvas.ALL_SAVE_FLAG); 
     super.dispatchDraw(canvas); 
     canvas.restore(); 
    } else { 
     super.dispatchDraw(canvas); 
    } 
} 
7

Если вы используете свой собственный макет, просто измените контейнер на RelativeLayout (или класс Layout, который наследуется от RelativeLayout) и поместите наложение цвета после основного макета. Все, что вам нужно, это добавить View и установить его фон и альфа. alpha, установленное на значение 1, активирует этот оверлей, тогда как установка alpha на 0 вернется к норме.

Пример:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- add your views here --> 

    <View 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#8000FF00" /> 

</RelativeLayout> 

Это будет перекрывать зеленый слой с 50% альфа над другими видами, которые перед этим в макете.

Смежные вопросы