Android: Как переключить изображение ImageButton, когда пользователь отпускает кнопку? - PullRequest
4 голосов
/ 07 февраля 2010

Я пытаюсь сделать так, чтобы, пока пользователь касается кнопки, он отображал одно изображение, а когда пользователь отпускает кнопку, он возвращается к изображению по умолчанию.

Я пытаюсь использовать селектор, чтобы это произошло:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true"
    android:drawable="@drawable/record_on" />
  <item android:state_focused="true"
    android:drawable="@drawable/record_off" />
  <item android:drawable="@drawable/record_off" />
</selector>

Я пробовал несколько вещей с селектором, но он всегда дает одно и то же поведение: кнопка запускается с изображением по умолчанию, затем я нажимаю его, и он меняется на изображение «record_on», и никогда не возвращается изображение по умолчанию, когда я отпускаю.

Есть ли способ получить такое поведение с помощью ImageButton, или я должен использовать что-то другое?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2010

Оказывается, я преждевременно использовал событие touch в моей реализации onTouch (). Когда я увидел событие ACTION_UP, я использовал его, возвращая значение true, и поэтому распространение события было остановлено до того, как селектор получил его. Вместо этого, возвращая значение false, включается поведение селектора, и изображение возвращается к значению по умолчанию.

Другими словами, я n00b.

Причина, по которой я сначала этого не заметил, заключалась в том, что событие ACTION_DOWN, казалось, работало нормально, и я тоже его потреблял. Позже я обнаружил, что это было событие ACTION_MOVE, а не событие ACTION_DOWN, которое вызывало изменение изображения кнопки, поскольку я возвращал false для всех других событий.

0 голосов
/ 07 февраля 2010

Возможно, вы захотите посмотреть на стандартный ресурс XML для Button / ImageButton, который выглядит как $ANDROID_HOME/platforms/$PLATFORM/data/res/drawable/btn_default.xml (где $ANDROID_HOME - это место, где установлен SDK, а $PLATFORM - любая версия API. Вы заинтересованы).

Их "нормальное" состояние:

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