El botón "Mantener presionado" en Android necesita cambiar de estado (selector XML personalizado) usando onTouchListener

Tengo un gráfico de botón que debe tener la funcionalidad de "mantener presionado", por lo que en lugar de usar onClickListener, estoy usando onTouchListener para que la aplicación pueda reaccionar.

 MotionEvent.ACTION_DOWN,

y

 MotionEvent.ACTION_UP

Dependiendo de la rapidez con que se activen esos dos eventos, puedo ejecutar un "pressAndHoldHandler" en el tiempo entre los dos.

De todos modos, cuento largo: tengo numerosos botones "básicos" en la misma aplicación que no requieren la función de presionar y mantener, por lo que están usando onClickListener.

Cada uno de estos botones se ha personalizado gráficamente con su propio archivo de selector XML:

<?xml version="1.0" encoding="UTF-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_enabled="false"
        android:drawable="@drawable/btn_chicken_off" />

    <item
        android:state_enabled="true"
        android:state_pressed="true"
        android:drawable="@drawable/btn_chicken_s3" />

    <item
        android:state_enabled="true"
        android:state_focused="true"
        android:drawable="@drawable/btn_chicken_s2" />

    <item
        android:state_enabled="true"
        android:drawable="@drawable/btn_chicken_off" />

</selector>

Por lo tanto, el problema aquí es: no se puede acceder al selector anterior con onTouchListener. Solo el onClickListener activará los cambios de estado con la sección onClick () de su propio método, por lo que estos botones de "mantener presionado" nunca cambian de estado. Comentarios bastante terribles para el usuario.

Actualmente estoy forzando lo anterior dentro del caso de cambio de ACTION_DOWN y ACTION_UP haciendo lo siguiente:

if (action == MotionEvent.ACTION_DOWN) {
    btn_chicken.setBackgroundResource(R.drawable.btn_chicken_s3);
}
else
    if (action == MotionEvent.ACTION_UP) {
        btn_chicken.setBackgroundResource(R.drawable.btn_chicken_off);
    }

Pero parece un truco, y falta la etapa de "enfocado pero no presionado".

¿Alguien se tropezó con esto antes?