2011-10-22 4 views
4

J'ai un bouton que je gère via un gestionnaire onClick.Gestion simultanée des événements onClick et onTouchEvent

Cependant, j'ai également besoin de répondre aux événements onTouchEvent pour pouvoir gérer l'éclairage des boutons. Le problème est que, si je retourne "false" de mon gestionnaire onTouchEvent, il appellera le gestionnaire onClick, mais ne me donnera jamais un onTouchEvent pour l'événement "up" suivant.

Si je renvoie "true" à partir d'onTouchEvent, je reçois l'événement "up", mais il ne le transmettra jamais à onClick.

Alors, quelles sont mes options?

  1. Mettre en oeuvre mon propre « cliquez sur » la manipulation à l'intérieur onTouchEvent - ce qui signifie que je serais obligé de suivre et se déplace en dehors de la zone du bouton, etc. semble un peu compliqué.

  2. Je pourrais avoir mon bouton utiliser un sélecteur au lieu d'une seule image, et assigner des images différentes pour différents états. Le problème que j'ai avec cela est que les sélecteurs sont lourds à changer les images, que je dois faire. (Lorsque mon application est dans les différents « modes », les images de bouton pour les différents états changent. Encore une fois, cela semble trop compliqué.

est pas là un moyen simple d'accomplir tout cela ???

+0

Laissez-moi voir si je comprends bien. Vous voulez remplacer la surbrillance par défaut d'un bouton par la vôtre? Si oui, pouvez-vous faire tout votre surbrillance dans onTouch et appeler button.performClick() lorsque vous recevez ACTION_UP? performClick appelle la méthode onClick du bouton, si un onclicklistener est défini. –

Répondre

1

Lorsque vous avez besoin à la fois un clic et touchez les événements sur la même vue, utilisez un GestureDetector. Vous devriez spefically regarder dans la méthode onShowPress de son auditeur.

1

Il semble que votre meilleur pari provenir de l'option 2, ci-dessus.

Je suggère la création de plusieurs ButtonStateListDrawable sélecteurs, puis passer entre les styles en utilisant programme Button.setBackgroundResource().

+0

C'est une bonne idée. Ce que je faisais en fait était de réécrire tout le StateListSelector à chaque fois que je voulais changer les images. Cependant, je voudrais laisser la question ouverte, quant à la façon de gérer onClick et onTouchEvents simultanément. – Brad