android android-5.0-lollipop rippledrawable

android - Cómo establecer state_selected en ripple dibujable



android-5.0-lollipop rippledrawable (4)

Cómo especificar android:state_selected dentro de un RippleDrawable

Tengo el siguiente xml para dibujar rizo, pero el color de fondo no aparece cuando configuro myView.setSelected(true);

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#DDDDDD" > <item android:id="@android:id/mask"> <shape> <solid android:color="@color/black" /> </shape> </item> <item android:state_selected="true"> <shape> <solid android:color="#EEEEEE" /> </shape> </item> <item> <color android:color="#FFFFFF" /> </item> </ripple>


Combinando la respuesta anterior con otras respuestas de:

¿Cuál debería ser el color de Ripple, colorPrimary o colorAccent? (Diseño de materiales)

Otorga un efecto de onda agradable que también funciona cuando el elemento está en un estado seleccionado.

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?attr/colorControlHighlight"> <!-- Ripple mask - applied to all selector states --> <item android:id="@android:id/mask"> <color android:color="#42ffffff" /> </item> <!-- Selected state of item --> <item> <selector> <item android:state_selected="true"> <color android:color="?attr/colorAccent" /> </item> </selector> </item> </ripple>

Esto va en su carpeta drawable-v21, para otras plataformas puede simplemente crear un selector que use el color de acento:

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


Encontré la respuesta, por si acaso alguien tiene el mismo problema

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#DDDDDD" > <item> <selector> <item android:state_selected="true"> <color android:color="#EEEEEE" /> </item> <item android:state_activated="true"> <color android:color="#EEEEEE" /> </item> <item> <color android:color="#FFFFFF" /> </item> </selector> </item> </ripple>


Para agregar a la respuesta de @Sohaib:

@Alanv tiene razón en que el OP no necesitaba una máscara. Pero si uno de sus estados de selector es transparente y necesita una máscara, aquí va:

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/ripple_color"> <!-- mask here... --> <item android:id="@android:id/mask"> <color android:color="@color/black"/> <!-- any color will do --> </item> <item> <selector> <!-- ... NOT here. --> <item android:state_selected="true"> <color android:color="@color/blue"/> </item> <item android:state_activated="true"> <color android:color="@color/red"/> </item> <item> <color android:color="@color/transparent"/> </item> </selector> </item> </ripple>

Inicialmente tenía la máscara dentro de mi selector y: boom:


Quería imitar el comportamiento de las casillas de verificación Material Design pero no pude obtenerlas correctamente hasta que utilicé una ColorStateList como esta:

En drawable-v21 / bg_checkbox_ripple.xml

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/checked_accent_statelist" android:radius="24dp"> </ripple>

En color / checked_accent_statelist.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="?colorControlHighlight" android:state_checked="false"/> <item android:color="?android:textColorHighlight" android:state_checked="true"/> </selector>

El atributo "? Android: textColorHighlight" es tu color de acento pero con la transparencia adecuada para usarlo en ondas (creo que es 26%).

Además, debe proporcionar una alternativa para dispositivos pre API 21 en drawable / bg_checkbox_ripple.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime"> <item> <shape android:innerRadius="24dp" android:shape="oval"> <solid android:color="@color/checked_accent_statelist"/> </shape> </item> </selector>