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 ?
Réponses
Trop de publicités?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.
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.
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.
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 :
- Cette classe (c'est-à-dire Foo) implémente l'interface OnTouchListener et
- Cette classe est un auditeur enregistré utilisant
view.setOnTouchListener(foo);
- Réponses précédentes
- Plus de réponses