Activity麻汰、ViewGroup、View 三者的事件傳遞機(jī)制戚篙。
一次完成事件傳遞主要包含三個階段五鲫,分發(fā)、傳遞岔擂、消費(fèi)位喂。
觸摸事件包括三個類型
ACTION_DOWN?
ACTION_MOVE
ACTION_UP
分別代表用戶觸摸屏幕時候的三個動作浪耘,由MotionEvent類負(fù)責(zé)管理。
第一階段 分發(fā)
dispatchTouchEvent()? 該方法返回true 表示當(dāng)前視圖消費(fèi)塑崖,不再進(jìn)行分發(fā)七冲,如果返回值為 super.dispatchTouchEvent() 則表示繼續(xù)分發(fā)。
如果當(dāng)前視圖時ViewGroup 及其子類规婆,則會調(diào)用 onInterceptTouchEvent()方法判斷是否攔截次事件澜躺。
第二階段 攔截
onInterceptTouchEvent() 該方法返回true 表示攔截該事件,不繼續(xù)分發(fā)給子視圖聋呢,同時交給自身的onTouchEvent()方法進(jìn)行消費(fèi)苗踪。
返回false或者super.onInterceptTouchEvent()則表示不攔截該事件,繼續(xù)傳給子視圖
第三階段 消費(fèi)
onTouchEvent() 該方法返回true 表示該事件由當(dāng)前視圖處理削锰,事件將不再交還給父視圖的onTouchEvent方法處理。
Android 系統(tǒng)中有事件處理能力的有三個
Activity:擁有dispatchTouchEvent()和 onTouchEvent()
ViewGroup:擁有dispatchTouchEvent() 毕莱、onInterceptTouchEvent()器贩、onTouchEvent()
View:擁有dispatchTouchEvent()、onTouchEvent()方法