丈夫志四海,万里犹比邻。这篇文章主要讲述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中事件触发和传递机制】
推荐阅读
- 安卓开源项目周报0315
- android shape.xml 属性详解
- C#方法代理/委托(delegate)用法介绍和示例
- C# GroupBox类用法示例介绍
- C# HashSet类介绍和用法示例
- C#如何将整个ArrayList复制到一维数组
- C# Int16结构用法示例介绍
- C# Int32结构用法示例和介绍
- C# Int64结构用法介绍和示例