您的位置:首页 > 移动开发 > Android开发

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

2017-03-16 22:39 441 查看
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

-------------------------------------------------------------------

  

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: