Esto se puede lograr creando un archivo xml dibujable que contenga una lista de estados para el botón. Entonces, por ejemplo, si crea un nuevo archivo xml llamado "button.xml" con el siguiente código:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/YOURIMAGE" />
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/gradient" />
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/gradient" />
<item android:drawable="@drawable/YOURIMAGE" />
</selector>
Para mantener la imagen de fondo con una apariencia oscura en la prensa, cree un segundo archivo xml y llámelo gradient.xml con el siguiente código:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<bitmap android:src="@drawable/YOURIMAGE"/>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:angle="90" android:startColor="#880f0f10" android:centerColor="#880d0d0f" android:endColor="#885d5d5e"/>
</shape>
</item>
</layer-list>
En el xml de su botón, configure el fondo para que sea el botón xml, por ejemplo
android:background="@drawable/button"
¡Espero que esto ayude!
Editar: se modificó el código anterior para mostrar una imagen (SUIMAGEN) en el botón en lugar de un color de bloque.