2010-02-07 3 views
4

J'essaye de faire en sorte que tant qu'un utilisateur touche le bouton, il montre une image, et quand l'utilisateur relâche le bouton, il revient à une image par défaut.Android: Comment changer l'image d'un ImageButton lorsque l'utilisateur relâche le bouton?

J'essaie d'utiliser un sélecteur pour ce faire:

<?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 petites choses avec le sélecteur, mais il produit toujours le même comportement: le bouton commence avec la valeur par défaut image, puis je l'appuie et il change à l'image "record_on" et il ne revient jamais à l'image par défaut quand je laisse aller.

Existe-t-il un moyen d'obtenir ce type de comportement avec un ImageButton, ou devrais-je utiliser quelque chose de différent?

Répondre

0

Il se trouve que je consommais prématurément l'événement touche à mon OnTouch() mise en œuvre. Lorsque j'ai vu un événement ACTION_UP, je le consommais en retournant true, et donc la propagation de l'événement a été arrêtée avant que le sélecteur ne l'obtienne. En retournant false à la place, le comportement du sélecteur est activé et l'image revient à la valeur par défaut.

En d'autres termes, je suis un n00b.

La raison pour laquelle je n'ai pas remarqué cela au début était parce que l'événement ACTION_DOWN semblait fonctionner correctement, et je consommais celui-là aussi. J'ai découvert plus tard que c'était l'événement ACTION_MOVE, pas l'événement ACTION_DOWN, qui causait la modification de l'image du bouton, puisque je retournais false pour tous les autres événements.

0

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 est $PLATFORM 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" /> 
+0

Nous vous remercions de votre réponse. J'ai cherché btn_default.xml et copié la structure et l'ordre du sélecteur, en définissant l'image "record_on" pour le state_pressed et "record_off" pour tout le reste. Il a toujours le même problème. Il passe à "record_on" lorsqu'il est pressé et ne revient jamais. – Ryan

+0

Je ne sais pas où les choses peuvent mal tourner, alors. Clairement, une pression de bouton normale restaure le bouton à l'état d'origine lorsque la presse est terminée. – CommonsWare

Questions connexes