Combinar StateListDrawable y LevelListDrawable
¿Hay una manera de combinar los efectos de un StateListDrawable y un LevelListDrawable?
Escribí este archivo de recursos, pero cuando se utiliza nada aparecen:
- Especificación de recortes transparentes en xml
- Crear animación cambiando la imagen en ImageView con Timer (o Handler)
- Cómo obtener el ID de fondo actual de una vista
- Android gradiente dibujable mediante programación
- Android: Comprensión de la carpeta dibujable
<?xml version="1.0" encoding="utf-8"?> <level-list xmlns:android="http://schemas.android.com/apk/res/android"> <selector android:constantSize="true" android:variablePadding="false" android:maxLevel="0" > <item android:state_pressed="true"> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_shade_pressed" /> </layer-list> </item> <item android:state_focused="true"> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_shade_selected" /> </layer-list> </item> <item> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_shade_normal" /> </layer-list> </item> </selector> <selector android:constantSize="true" android:variablePadding="false" android:maxLevel="1" > <item android:state_pressed="true"> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_lighted" /> <item android:drawable="@drawable/btu_shade_pressed" /> </layer-list> </item> <item android:state_focused="true"> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_lighted" /> <item android:drawable="@drawable/btu_shade_selected" /> </layer-list> </item> <item> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_lighted" /> <item android:drawable="@drawable/btu_shade_normal" /> </layer-list> </item> </selector> </level-list>
Entonces llamo
_btn.getBackground().setLevel(level); //level is either 0 or 1
para cambiar el nivel de la drawable (_btn es un botón btw).
¿Por qué no funciona?
Gracias por adelantado.
- Dibujos no cambian después de ser reemplazados por otros en las carpetas
- Fuga de memoria de Android Drawables
- Escala de mapa de bits a 80 por ciento
- ¿Por qué setImageBitmap no tiene efecto en ImageButton personalizado?
- ¿Cómo puedo agregar OnClickListener a Drawable en EditText?
- XML vs setImageDrawable / setImageBitmap
- Combine la imagen y el texto a dibujable
- Android: ¿Cómo mover un BitmapDrawable?
Encontré la solución: los elementos <selector> deben estar incluidos en elementos <item>:
<?xml version="1.0" encoding="utf-8"?> <level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:maxLevel="0" > <selector android:constantSize="true" android:variablePadding="false" > <item android:state_pressed="true"> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_shade_pressed" /> </layer-list> </item> <item android:state_focused="true"> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_shade_selected" /> </layer-list> </item> <item> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_shade_normal" /> </layer-list> </item> </selector> </item> <item android:maxLevel="1" > <selector android:constantSize="true" android:variablePadding="false" > <item android:state_pressed="true"> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_lighted" /> <item android:drawable="@drawable/btu_shade_pressed" /> </layer-list> </item> <item android:state_focused="true"> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_lighted" /> <item android:drawable="@drawable/btu_shade_selected" /> </layer-list> </item> <item> <layer-list> <item android:drawable="@drawable/btu_color_standard" /> <item android:drawable="@drawable/btu_lighted" /> <item android:drawable="@drawable/btu_shade_normal" /> </layer-list> </item> </selector> </item> </level-list>
En mi caso, el problema fue que no establecí el botón para usar el fondo en la lista de niveles. Por ejemplo, si tiene la lista de niveles definida en res / drawable / button_levels.xml, debe configurar el fondo del botón como "@ drawable / button_levels".
- ¿Cómo lanzar el lanzador casero del defecto con código mientras que trabaja con el dispositivo verdadero?
- ANDROID: ¿Cómo puedo iniciar un diálogo emergente desde una notificación o un botón de búsqueda presionado encima de todas las ventanas?