Кнопка «Нажми и удерживай» на 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);
}
Но это похоже на взлом, и ему не хватает «сфокусированного, но не нажатого»; этап.
Кто-нибудь сталкивался с этим раньше?