码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2017-03-16 23:46:44      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:情况   活动   view   总结   --   键盘事件   viewgroup   触摸   log   

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中事件触发和传递机制

标签:情况   活动   view   总结   --   键盘事件   viewgroup   触摸   log   

原文地址:http://www.cnblogs.com/ganchuanpu/p/6562057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!