首页 > 代码库 > 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中事件触发和传递机制