Question

Après de nombreuses expériences avec Ontouchevent et Ontouch, j'ai trouvé qu'Ontouch fonctionne partout où vous voulez (que ce soit en activité ou en vue) tant que vous avez déclaré l'interface et mettez l'auditeur correctement! D'un autre côté, Ontouchevent ne fonctionne que dans une vue! Mon hypothèse est-elle correcte? Est-ce la vraie différence?

Était-ce utile?

La solution

Oui tu as raison - onTouch() est utilisé par utilisateurs de la View Pour obtenir des événements tactiles pendant que onTouchEvent() est utilisé par classes dérivées de la View Pour obtenir des événements tactiles.

Autres conseils

J'ai eu une certaine confusion liée à la façon dont OnTouchevent () et Ontouch () fonctionnent (vous pouvez voir mon commentaire sur cette question). Après quelques recherches ci-dessous, ce que j'ai trouvé à ce sujet. Cela peut être utile aux débutants.

1) Implémentation:

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

1- Implémentez OntouchListener

2- Appelez setontouchListener () sur la vue que vous souhaitez définir Catch the Event

3- Override Ontouch () pour gérer l'événement

Mais si vous souhaitez utiliser Ontouchevent (), vous n'avez pas besoin de faire les étapes 1 et 2 ci-dessus. Vous devez simplement remplacer Ontouchevent ().

2) Travailler:

onTouch () fonctionne en vue, ViewGroup, activité. Ce qui signifie que vous pouvez utiliser Ontouch () Inside View, ViewGroup ou Activity. Ces méthodes prennent deux arguments [Ontouch (View V, MotionEvent E)]. Cela vous permet de filtrer les événements pour différentes vues dans un groupe d'activité ou de vue. Ou l'activité peut elle-même le gérer. Ontouchevent () prend un argument [onTouchEvent(MotionEvent e) ]. Ainsi, cela ne peut être utilisé qu'à l'intérieur de la vue qui l'implémente ou sur la vue dérivée. Une vue dérivée permet l'extension du comportement tactile défini dans aTouchevent ().

Je pense que de telles options font partie de la philosophie de développement plus flexible d'Android, bien qu'elle 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 de vue unique, comme des boutons, des butts d'image, etc. sur une vue unique (disons linearlayout), alors que lorsque je veux travailler sur les zones au reste de la Mes éléments (bouton par exemple) j'utilise OntouchEvent.

L'ontouchevent () en fait sera Soyez appelé par l'activité si aucune des vues ne consomme l'événement tactile.

Et comme vous le dites, l'ontouch () peut être utilisé dans n'importe quelle classe, tant que:

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

Lors de la création d'une vue personnalisée, vous pouvez

@override onTouchEvent(MotionEvent e){}

Alors que vous pouvez ajouter Ontouch à n'importe quelle vue, ViewGroup 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 à l'aide d'Ontouch.

J'ai trouvé une autre différence. Ontouchevent ne semble pas obtenir les événements obsolètes MotionEvent.Action_Pointer_2_down et MotionEvent.Action_Pointer_2_up.

Bien sûr, ils sont assez vieux et nous ne devrions pas les utiliser.

Ceci est dans Android 5.1 API 22.

aTouchevent est une méthode implémentée par le Voir, Activité et d'autres cours de base comme Linearlayout, etc..

public boolean onTouchEvent(MotionEvent event) {
    throw new RuntimeException("Stub!");
}

vous pouvez remplacer cette méthode par toutes les classes dérivées

tandis que

aTouch () est défini par l'interface OnTouchListener{}

public interface OnTouchListener { boolean onTouch(View var1, MotionEvent var2); }

Vous n'avez donc besoin d'en implémenter un que lorsque vous définissez cette interface à une classe

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top