首页 > 代码库 > 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中事件触发和传递机制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。