Android事件传递机制

Posted 好喝的钙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android事件传递机制相关的知识,希望对你有一定的参考价值。

技术图片

事件传递要经的方法

public boolean dispatchTouchEvent(MotionEvent ev); //分发事件
public boolean onInterceptTouchEvent(MotionEvent ev); //拦截事件
public boolean onTouchEvent(MotionEvent ev); //处理事件

事件传递的简介

ViewGroup

接收事件后,进行分发:

  1. 如果不进行分发,则dispatchTouchEvent返回true,事件消亡未处理。
  2. 如果进行分发该事件,则dispatchTouchEvent返回false,处理或传递该事件:
  • 如果想自己处理该事件,则onInterceptTouchEvent返回true,拦截事件,给自己的onTouchEvent进行处理;
  • 如果不想处理该事件,则onInterceptTouchEvent返回false,把事件传递给子View进行处理。
  1. 对于最底层的子View,没有onInterceptEvent拦截事件,接收到事件后进行分发:
  • 如果不进行分发,则dispatchTouchEvent返回false,事件未处理,注意这里的最小子view返回false代表未分发事件;
  • 如果进行分发该事件,则dispatchTouchEvent返回true
  1. 如果处理该事件,则onTouchEvent返回true把该事件消费掉;
  2. 如果不想处理该事件,则onTouchEvent返回false,等待上级处理。

需要注意:

viewGroup中包含的最小子view是不含拦截onInterceptTouchEvent事件的,最小的子view比如Button,TextView...因为他们已在树的最底层,已无法向下传递了。

以上是关于Android事件传递机制的主要内容,如果未能解决你的问题,请参考以下文章

Android 事件传递机制

Android Touch事件传递机制全面解析(从WMS到View树)

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )

Android 事件传递机制进阶

Android事件传递机制

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 五 )