Android Activity 和 ViewGroup中事件触发和传递机制

丈夫志四海,万里犹比邻。这篇文章主要讲述Android Activity 和 ViewGroup中事件触发和传递机制相关的知识,希望能为你提供帮助。
1.在只有Activity的情况:
1)Touch事件触发流程:

首先触发dispatchTouchEvent 然后触发onUserInteraction 再次onTouchEvent 如果是点击的话,紧跟着下列事件(点击分俩步,ACTION_DOWN,ACTION_up) 触发dispatchTouchEvent 再次onTouchEvent 当ACTION_up事件时不会触发onUserInteraction(可查看源代码)

2)键盘事件触发流程
首先触发dispatchKeyEvent 然后触发onUserInteraction 再次onKeyDown如果按下紧接着松开,则是俩步 紧跟着触发dispatchKeyEvent 然后触发onUserInteraction 再次onKeyUp 注意与触摸不同,当松开按键时onUserInteraction也会触发。

总之:    Activity.dispatchTouchEvent(MotionEvent)  - 这允许你的活动可以在分发给窗口之前捕获所有的触摸事件。(同理  dispatchKeyEvent)
 
2.Activity里有一个Layout,在Layout里有个按钮情况:
如果在按钮上触发一个CLICK事件,那么事件传递流程:
首先触发ACTIVITY的dispatchTouchEvent 然后触发ACTIVITY的onUserInteraction然后触发LAYOUT的dispatchTouchEvent 然后触发LAYOUT的onInterceptTouchEvent然后触发BUTTON的onTouch(这是一个ACTION_DOWN事件)紧跟着是一个ACTION_UP事件触发ACTIVITY的dispatchTouchEvent 注意不再触发ACTIVITY的onUserInteraction,因为他对ACTION_UP不起作用。然后触发LAYOUT的dispatchTouchEvent 然后触发LAYOUT的onInterceptTouchEvent然后触发BUTTON的onTouch 最后触发BUTTON的onClick.如果你在ONTOUCH事件里返回true,消费了此事件,那么ONCLICK将不会被响应但是如果你不写ONCLICK事件,而ONTOUCH事件返回FLASE

3.总结:
android事件触发流程:
-------------------------------------------------------------------
首先触发ACTIVITY的dispatchTouchEvent
然后触发ACTIVITY的onUserInteraction
然后触发LAYOUT的dispatchTouchEvent
然后触发LAYOUT的onInterceptTouchEvent
-------------------------------------------------------------------


【Android Activity 和 ViewGroup中事件触发和传递机制】

    推荐阅读