Android: Comment puis-je changer l'image d'un ImageButton lorsque l'utilisateur relâche le bouton?
-
19-09-2019 - |
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?
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" />