事件分發(fā)機制總結(jié)

事件分發(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容