58 votes

onTouchevent() vs onTouch()

Après de nombreuses expériences avec onTouchEvent et onTouch, j'ai découvert que onTouch fonctionne partout où vous voulez (que ce soit dans une activité ou une vue) tant que vous avez déclaré l'interface et mis le Listener correctement ! D'un autre côté, onTouchEvent ne fonctionne qu'à l'intérieur d'une vue ! Ma supposition est-elle correcte ? Est-ce la vraie différence ?

42voto

trojanfoe Points 61927

Oui, vous avez raison. onTouch() est utilisé par utilisateurs de la View pour obtenir des événements de contact alors que onTouchEvent() est utilisé par classes dérivées de la View pour obtenir des événements de contact.

29voto

Dexter Points 150

J'ai eu quelques confusions concernant le fonctionnement de onTouchEvent() et onTouch() (Vous pouvez voir mon commentaire à cette question). Après quelques recherches, voici ce que j'ai trouvé à ce sujet. Cela peut être utile aux débutants.

1) Mise en œuvre :

Si vous voulez utiliser onTouch(), vous devez faire trois choses.

1- implémenter OnTouchListener

2- appelez setOnTouchListener() sur la vue qui doit capter l'événement.

3- surchargez onTouch() pour gérer l'évènement

mais si vous voulez utiliser onTouchEvent() vous n'avez pas besoin de faire les étapes 1 et 2 ci-dessus. il suffit de surcharger onTouchEvent().

2) Travail :

onTouch() fonctionne sur la vue, le groupe de vues, l'activité. Cela signifie que vous pouvez utiliser onTouch() à l'intérieur d'une vue, d'un groupe de vues ou d'une activité. Cette méthode prend deux arguments [onTouch(View v, MotionEvent e) ]. Cela vous permet de filtrer les événements pour différentes vues dans une activité ou un groupe de vues. Ou l'activité peut elle-même le gérer. onTouchEvent() prend un argument [ onTouchEvent(MotionEvent e) ]. Elle ne peut donc être utilisée qu'à l'intérieur de la vue qui l'implémente ou sur la vue dérivée. Une vue dérivée permet d'étendre le comportement tactile défini dans onTouchEvent().

Je pense que ces options font partie de la philosophie de développement plus flexible d'Android, bien que cela crée parfois de la confusion pour les apprenants.

5voto

bangrang Points 741

J'ai utilisé ontouch() et ontouchevent(), car ontouch est utilisé lorsque je veux travailler sur des éléments d'une seule vue, comme des boutons, des boutons d'image, etc. sur une seule vue (disons Linearlayout), tandis que lorsque je veux travailler sur les zones du reste de mes éléments (par exemple le bouton), j'utilise ontouchevent.

4voto

Nepster Points 893

En créant une vue personnalisée, vous pouvez

@override onTouchEvent(MotionEvent e){}

alors que vous pouvez ajouter onTouch à n'importe quelle vue, groupe de vues ou activité.

onTouch(View v, MotionEvent e) { //you can filter any View's touch }

onTouch est générique et onTouchEvent est spécifique à la vue. Et vous pouvez également filtrer votre vue en utilisant onTouch.

4voto

paiego Points 1781

La fonction onTouchEvent() sera est appelé par l'activité si aucune des vues ne consomme l'événement tactile.

Et comme vous le dites, le onTouch() peut être utilisé dans n'importe quelle classe, à condition que :

  1. Cette classe (c'est-à-dire Foo) implémente l'interface OnTouchListener et
  2. Cette classe est un auditeur enregistré utilisant view.setOnTouchListener(foo);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X