图解事件分发机制

一.为什么要学习事件分发机制:

熟悉整套的分发机制有助于更好的分析各种点击滑动冲突问题,更好去扩展控件的事件功能和开发自定义控件

讲解大纲

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进行事件处理

三.解决哪些实际问题

Android滑动冲突解决方法(一) -

四.设计思想

《JAVA与模式》之责任链模式 - CSDN博客

你可能感兴趣的:(图解事件分发机制)