Android: Comment puis-je changer l'image d'un ImageButton lorsque l'utilisateur relâche le bouton?

StackOverflow https://stackoverflow.com/questions/2215307

Question

Je suis en train de faire en sorte que, tant que l'utilisateur touche le bouton, il montre une image, et lorsque l'utilisateur relâche le bouton, il retourne à une image par défaut.

Je suis en train d'utiliser un sélecteur pour y arriver:

<?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>

J'ai essayé quelques choses avec le sélecteur, mais il produit toujours le même comportement: le bouton commence avec l'image par défaut, je presse et il passe à l'image « record_on » et il ne revient pas à l'image par défaut quand je laisse aller.

Y at-il un moyen d'obtenir ce genre de comportement avec un ImageButton, ou devrais-je utiliser quelque chose de différent?

Était-ce utile?

La solution 2

Il se trouve que je consommais prématurément l'événement touche dans ma mise en œuvre OnTouch (). Quand j'ai vu un événement ACTION_UP, je consommais en retournant vrai, et donc la propagation de l'événement a été arrêté avant le sélecteur obtenu. En retournant faux à la place, les coups de pied de comportement du sélecteur et l'image revient à la valeur par défaut.

En d'autres termes, je suis un n00b.

La raison pour laquelle je ne l'ai pas remarqué ce fut d'abord parce que l'événement ACTION_DOWN semblait fonctionner très bien, et je consommait celui-là aussi. J'ai découvert plus tard que ce fut l'événement ACTION_MOVE, et non pas l'événement ACTION_DOWN, qui était à l'origine de l'image du bouton pour changer, puisque je rentrais faux pour tous les autres événements.

Autres conseils

Vous pouvez regarder la ressource XML standard pour un Button / ImageButton, qui semble être $ANDROID_HOME/platforms/$PLATFORM/data/res/drawable/btn_default.xml (où $ANDROID_HOME est l'endroit où vous avez votre SDK installé et $PLATFORM est quelle que soit la version API qui vous intéresse).

Leur état "normal" est:

<item android:state_enabled="true"
    android:drawable="@drawable/btn_default_normal" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top