一.为什么要学习事件分发机制:
熟悉整套的分发机制有助于更好的分析各种点击滑动冲突问题,更好去扩展控件的事件功能和开发自定义控件
讲解大纲
1.事件分发流程
2.DOWN,MOVE,UP事件传递关系
3.解决哪些实际问题
4.常见疑问
5.设计思想
一.事件分发流程(函数调用关系)
可以写简单的demo对照这张图试验一下
白色箭头:函数的调用流程
消费:函数的调用流程终止 不再执行箭头方向的函数
二.ACTION_DOWN,ACTION_MOVE,ACTION_UP事件
红色的箭头代表ACTION_DOWN 事件的流向
蓝色的箭头代表ACTION_MOVE 和 ACTION_UP 事件的流向
图1
图2
分析结论:dispatchTouchEvent 返回true消费终结事件,那么收到ACTION_DOWN 的函数也能收到 ACTION_MOVE和ACTION_UP.
图3
图4
图5
图6
图7
图8
图9
图10
图11
分析总结:
1.dispatchTouchEvent()和 onTouchEvent()用于消费事件、终结事件传递
2.onInterceptTouchEvent 并不能消费事件,它相当于是一个分叉口起到分流导流的作用
3.X控件dispatchEvent() true 那么Down,Moive,Up走的路径一样 终点为X控件dispatchEvent()
4.X控件ontouchEvent() true 那么Down走类U型 (Moive,Up走L型) 终点为X控件ontouchEvent()
5.onTouch—–>onTouchEvent—>onclick 层级关系
6.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && mOnTouchListener.onTouch(this, event)
如果X控件是非enable的那么只能重写onTouchEvent进行事件处理
三.解决哪些实际问题
四.设计思想