O botão "Pressione e segure" no Android precisa alterar os estados (seletor de XML personalizado) usando onTouchListener

Eu tenho um botão gráfico que precisa ter a funcionalidade "pressione e segure", então ao invés de usar o onClickListener, eu estou usando onTouchListener para que o aplicativo possa reagir

 MotionEvent.ACTION_DOWN,

e

 MotionEvent.ACTION_UP

Dependendo da rapidez com que esses dois eventos são acionados, posso executar um "pressAndHoldHandler" no tempo entre os dois.

Enfim, longa história: Eu tenho inúmeros botões "básicos" no mesmo aplicativo que não exigem a funcionalidade de pressionar e segurar, então eles estão usando o onClickListener.

Cada um desses botões foi customizado graficamente com seu próprio arquivo seletor de 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>

Então, o problema aqui é: O seletor acima não é acessado com o onTouchListener. Apenas o onClickListener irá puxar as mudanças de estado com a seção onClick () de seu próprio método, então esses botões "pressione e segure" nunca mudam de estado. Feedback muito terrível para o usuário.

Atualmente, estou forçando o que está acima dentro da caixa de comutação de ACTION_DOWN e ACTION_UP fazendo o seguinte:

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);
    }

Mas parece um hack, e está faltando o estágio "focado, mas não pressionado".

Alguém tropeçou nisso antes?