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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中事件触发和传递机制的主要内容,如果未能解决你的问题,请参考以下文章

Android之UI View与ViewGroup

Android Studio 布局错误

2Android-UI(自定义控件&ListView)

android fragment和activity的区别

关于android编程中service和activity的区别

Android总结 - Activity任务和返回栈保存Activity的状态