事件分發(fā)
所謂事件,就是點擊事件,即MitionEvent對象;事件分發(fā),就是對MotionEvent事件的分發(fā)過程,及當(dāng)一個MotionEvent產(chǎn)生了以后,系統(tǒng)需要把這個事件傳遞給一個具體的View,這個傳遞的過程就是分發(fā)過程
點擊事件的分發(fā)過程有三個很重要的方法來共同完成
dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent
事件分發(fā) 結(jié)論
- 同一個事件序列是指從手指觸摸屏幕的那一刻起,到手指離開屏幕的那一刻結(jié)束,在這個過程中所產(chǎn)生的一系列事件,這個事件序列以down事件開始,中間含有數(shù)量不定的move事件,最終以up結(jié)束
- 正常情況下,一個事件序列只能被一個View攔截且消耗
- 某個View一旦決定攔截,那么這一個事件序列都只能由它來處理
- 某個View一旦開始處理事件,如果它不消耗ACTION_DOWN事件(onTouchEvent返回false),那么同一事件序列中的其他事件都不會再交給它來處理,并且將事件重新交給它的父元素去處理,即父元的onTouchEvent會被調(diào)用
- ViewGroup 默認不攔截任何事件,Android源碼中ViewGroup的onInterceptTouchEvent方法默認返回false
- View沒有onInterceptTouchEvent,一旦有點擊事件傳遞給它,那么它的onTouchEvent方法就會被調(diào)用
- View的onTouchEvent默認都會消耗事件,返回true,除非他是不可點擊的,clickable和longClickable同時返回false,View的longClickable默認為false,clickable分情況,button的默認是true,textview默認是false
- View 的enable屬性不影響onTouchEvent的默認返回值
- onClick會發(fā)生的前提是當(dāng)前view是可點擊的,并且收到了down和up事件
- 事件傳遞過程是由外向內(nèi)的,即事件總是先傳遞給父元素,再由父元素分發(fā)給子View