目录
一、什么是事件派发:
将点击事件传递到某个具体的View和处理的整个过程,
在 Activity、ViewGroup、View中传递。
二、派发的传递的区别:
派发 → Activity。
传递 → 布局、控件。
三、事件派发的核心方法:
1. dispatchTouchEvent()
分发传递事件,当点击事件传递给当前对象时会被调用
默认:直接调用后续动作中的方法
Activity:调用 ViewGroup.dispatchTouchEvent();
或 Activity.onTouchEvent();
ViewGroup:调用自身的 onInterceptTouchEvent();
View:会调用onTouchEvent();
true:当前事件被消费,事件停止分发,逐层向上返回,若无调用则结束。
后续事件继续分发到该View。
false:当前事件无法被消费,将事件回传给上层 onTouchEvent() 处理,若无调用则结束。
当前 View仍接受此事件的其他事件。
2. onInterceptTouchEvent()
判断是否拦截某个事件,在 ViewGroup的 dispatchTouchEvent() 内部调用
ture:当前事件被 ViewGroup拦截,事件停止向下传递,ViewGroup自己处理
false:当前事件没被 ViewGroup拦截,事件继续向下传递,事件传递到子 View,调用 View.dispatchTouchEvent()处理。
3. onTouchEvent()
处理点击事件,在 dispatchTouchEvent内部调用
ture:当前分发处理了事件,事件停止分发,逐层往 dispatchTouchEvent()返回
false:当前分发对象无处理事件,将事件传递给上层 onTouchEvent()处理。