Кнопка «Нажми и удерживай» на Android должна изменить состояния (пользовательский селектор XML) с помощью onTouchListener

У меня есть кнопка, на которой нужно нажать и удерживать кнопку функциональность, поэтому вместо использования onClickListener я использую onTouchListener, чтобы приложение могло реагировать на

 MotionEvent.ACTION_DOWN,

а также

 MotionEvent.ACTION_UP

В зависимости от того, как быстро сработают эти два события, я могу запустить & quot; pressAndHoldHandler & quot; во время между двумя.

Во всяком случае, короткая история: у меня есть множество "основных" кнопки в том же приложении, для которых не требуется функциональность нажатия и удержания, поэтому они используют onClickListener.

Каждая из этих кнопок была настроена графически с помощью собственного файла 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>

Итак, проблема здесь в следующем: вышеупомянутый селектор не доступен с помощью onTouchListener. Только onClickListener будет извлекать изменения состояния с помощью секции onClick () своего собственного метода, поэтому они & quot; нажмите и удерживайте & quot; кнопки никогда не меняют состояние. Довольно ужасная обратная связь для пользователя.

Я в настоящее время заставляю вышеупомянутое внутри случая переключения ACTION_DOWN и ACTION_UP, выполняя следующее:

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

Но это похоже на взлом, и ему не хватает «сфокусированного, но не нажатого»; этап.

Кто-нибудь сталкивался с этим раньше?

Ответы на вопрос(5)

Ваш ответ на вопрос