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()
事件往上回归。
网友评论