Android基础
- 4大组件
- View事件分发
- View的绘制流程
-
线程之间的通信
个人认为以上是Android 4大知识点,是Android初级工程师进阶中级工程师必备知识点。
今天来讲下个人对这4大知识点之中的 View的事件分发认识。
首先来看一张图,来自Kelin 图解 Android 事件分发机制,觉得写得非常不错,大家可以去看下。

事件分发详细图解
图中把事件分发描绘的非常详细,仔细认真看多几次,可以加深印象。
上图认为 dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent的返回值有三个,return true;、return false、return super.xxx()。
1、View 和 ViewGroup 的区别
View事件分发相关方法:
- dispatchTouchEvent 分发
- onTouchEvent 处理触摸
ViewGroup事件分发相关方法:
- dispatchTouchEvent 分发
- onInterceptTouchEvent 拦截
- onTouchEvent 处理触摸
可以看出ViewGroup比View多出了个Intercept拦截的方法,如果ViewGroup要处理消耗触摸事件,就要通过拦截来把事件给指派给自己。
2、dispatchTouchEvent
- ViewGroup
ViewGroup 的 dispatchTouchEvent 方法
return true;、return false都会消耗该事件。不同的是return true;表示事件是自己消耗了,return false表示自己不传递事件,把事件往上回归。
return super.dispatchTouchEvent()会先调用onInterceptTouchEvent看自己是否需要消耗该事件,如果不需要则把事件传递给子View了,如果super.dispatchTouchEvent()返回true表示里面的子View消耗了事件,返回false表示没有消耗。 - View
VIew 的 dispatchTouchEvent 方法
return true;消耗该事件,事件往上回归,
return false事件往上回归。
return super.dispatchTouchEvent()事件传递给onTouchEvent()
3、onIntercepTouchEvent
该方法只有ViewGroup有,在ViewGroup中调用父类 dispatchTouchEvent() 会去查看是否需要拦截事件。
return true表明自己要消耗该事件。
return false表明自己不需要该事件,事件继续传递。
4、onTouchEvent
- ViewGroup
return true;消耗该事件,事件往上回归,
return false、return super.onTouchEvent()事件往上回归。