什麼是事件分發
用戶通過屏幕與手機交互的時候,每一次點擊、長按、移動等都是一個事件。
事件分發機制:
某一個事件從屏幕傳遞到各個View,由View來使用這一事件(消費事件)或者忽略這一事件(不消費事件),這整個過程的控制。
事件分發的對象是誰
系統把事件封裝爲MotionEvent對象,事件分發的過程就是MotionEvent分發的過程。
事件的類型
按下(ACTION_DOWN)
移動(ACTION_MOVE)
擡起(ACTION_UP)
取消(ACTION_CANCEL)
事件取消的例子:屏幕上有個ScrollView,它可以進行上下的滾動,在ScrollView上有個Button,當我們把手指按在這個Button上的時候,Button是可以接收到按下(ACTION_DOWN)的這個事件的,這個時候我們的手指進行上下的移動,Button的父容器ScrollView就會去攔截這麼一個事件,同時Button上就會接收到取消(ACTION_CANCEL)這個事件,表示當前這個的點擊事件對於Button來說取消了。
事件序列
從手指按下屏幕開始,到手指離開屏幕所產生的一系列事件。
傳遞層級
Activity - > Window - > DecorView - > ViewGroup - > View
手指觸碰到Activity時,事件會有這麼一個過程:
事件最初會在Activity之上,然後通過Window傳遞到DecorView上(這裏的DecorView就是Window所持有的一個DecorView),而DecorView又繼承至ViewGroup,事件從這個ViewGroup進行分發,然後纔會分發到我們創建的一個個子的ViewGroup和View上。
主要傳遞對象及順序
Activity
ViewGroup
View