XML dibujable compuesto de png y superposición

Tengo un botón png, que está habilitado, no presionado. Cuando el usuario hace clic en el botón, sólo quiero oscurecer el png. Necesito algo como esto:

<selector xmlns:android="http://schemas.android.com/apk/res/android" > //normal button with background my_button.png <item android:state_enabled="true" android:drawable="@drawable/my_button" //my_button.png /> //pressed button with background my_button.png overlayed by 50% black <item android:state_pressed="true" android:state_enabled="true" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <bitmap android:src="@drawable/my_button"/> <color android:color="#00000088"/> </RelativeLayout> </item> </selector> 

¿Hay alguna manera de cómo hacer eso? ¿O debo tener otro archivo png?

En my_button_bg.xml:

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

Button_normal es un png

Button_pressed es un xml:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/button_normal"/> <item android:drawable="@color/btn_bg_pressed_mask"/> </layer-list> 

Donde btn_bg_pressed_mask es un color:

 <color name="btn_bg_pressed_mask">#19000000</color> 

Esto debería funcionar

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:drawable="@drawable/my_button" /> <item> <selector> <item android:state_pressed="true" android:state_enabled="true"> <color android:color="#00000088" /> </item> </selector> </item> </layer-list> 

El orden de los elementos en el selector XML hace una diferencia. El primer partido es lo que se va a mostrar. Como se ve en la respuesta de marmor, el estado normal del botón aparece al final.

Otra cosa a tener en cuenta es que si está utilizando imágenes de 9 parches (.9png), el color sólo se aplicará al área de contenido. Así que si desea que el color se superponga en toda la imagen, asegúrese de marcar toda la imagen como el área de contenido.

  • Android: animateLayoutChanges = "true" con setVisibility (View.GONE)
  • Elemento de menú de Android con el icono y el texto juntos cuando showAsAction nunca es
  • Recursos de la cadena de fondo de Android
  • Almacenar un texto grande y estructurado en la aplicación Android
  • Cómo agregar un degradado a los botones en android a través de xml?
  • ¿Cómo establecer un fondo diferente para la tecla de función en xml en el teclado?
  • No se puede resolver drawable en el atributo "src"
  • Android: AlertDialog Button no acepta el estilo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.