一、事件分發的對象是誰
答:點擊事件(Touch事件)
-
定義
當用戶觸摸屏幕時(View或ViewGroup派生的控件),將產生點擊事件。Touch事件的相關細節(發生觸摸的位置。時間等)被封裝成MotionEvent對象 -
事件類型(4種)
事件類型 | 具體動作 |
---|---|
MotionEvent.ACTION_DOWN | 按下View(所有事件的起點) |
MotionEvent.ACTION_UP | 擡起View(與Down相對應) |
MotionEvent.ACTION_MOVE | 滑動View |
MotionEvent.ACTION_CANCEL | 結束事件(非人爲結束) |
- 事件列
從手指解除屏幕至手指離開屏幕,這個過程產生的一系列事件。
即當一個點擊事件(MotionEvent)產生後,系統需把這個事件傳遞一個具體的View去處理。
二、事件分發的本質
答:將點擊事件(MotionEvent)傳遞到某個具體的View並且處理整個過程。即事件傳遞的過程 = 分發過程。
三、事件在哪些對象之間進行傳遞
答:Activity、ViewGroup、View
四、事件分發的順序
答:Activity -> ViewGroup -> View。即一個點擊事件發生後,事件先傳到Activity、再傳到ViewGroup、最終傳到View。
五、事件分發過程由哪些方法協作完成?
答:
方法 | 作用 | 調用時刻 |
---|---|---|
dispatchTouchEvent() | 分發(傳遞)點擊事件 | 當點擊事件能夠傳遞給當前View時,該方法就會被調用 |
onTouchEvent() | 處理點擊事件 | 在dispatchTouchEvent()方法內部調用 |
onInterceptTouchEvent() | 判斷是否攔截了某個事件,只存在於ViewGroup中,普通的View沒有該方法 | 在ViewGroup的dispatchTouchEvent()內部調用 |