2010-02-07 2 views
4

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

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

<?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, или я должен использовать что-то другое?

ответ

0

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

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

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

0

Вы можете посмотреть на стандартный ресурс 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" /> 
+0

Благодарим за отзыв. Я посмотрел btn_default.xml и скопировал структуру и порядок селектора, установив образ «record_on» для state_pressed и «record_off» для всего остального. У этой проблемы все еще есть та же проблема. Он переключается на «record_on» при нажатии и никогда не возвращается. – Ryan

+0

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

Смежные вопросы