Le meilleur endroit pour démystifier cela est le code source. Les documents sont terriblement insuffisants pour expliquer cela.
dispatchTouchEvent est en fait défini sur Activity, View et ViewGroup. Considérez-le comme un contrôleur qui décide comment acheminer les événements tactiles.
Par exemple, le cas le plus simple est celui de View.dispatchTouchEvent qui acheminera l'événement tactile vers OnTouchListener.onTouch s'il est défini ou vers la méthode d'extension onTouchEvent .
Pour ViewGroup.dispatchTouchEvent, les choses sont beaucoup plus compliquées. Il doit déterminer laquelle de ses vues enfant doit obtenir l'événement (en appelant child.dispatchTouchEvent). Il s'agit essentiellement d'un algorithme de test de réussite dans lequel vous déterminez quel rectangle de délimitation de la vue enfant contient les coordonnées du point de contact.
Mais avant de pouvoir envoyer l'événement à la vue enfant appropriée, le parent peut espionner et / ou intercepter l'événement tous ensemble. C'est pourquoi onInterceptTouchEvent est là. Donc, il appelle cette méthode avant de faire le test de hit et si l'événement a été détourné (en renvoyant true depuis onInterceptTouchEvent), il envoie un ACTION_CANCEL aux vues enfant afin qu'ils puissent abandonner leur traitement des événements tactiles (des événements tactiles précédents) et à partir de là. tous les événements tactiles au niveau parent sont envoyés à onTouchListener.onTouch (si défini) ou onTouchEvent (). Dans ce cas également, onInterceptTouchEvent n'est plus appelé.
Souhaitez-vous même remplacer [Activity | ViewGroup | View] .dispatchTouchEvent? À moins que vous ne fassiez un routage personnalisé, vous ne devriez probablement pas le faire.
Les principales méthodes d'extension sont ViewGroup.onInterceptTouchEvent si vous souhaitez espionner et / ou intercepter un événement tactile au niveau parent et View.onTouchListener / View.onTouchEvent pour la gestion de l'événement principal.
Dans l'ensemble, son design trop compliqué imo mais les apis android se tournent davantage vers la flexibilité que la simplicité.