相關(guān)的方法
- 分發(fā)
public boolean dispatchTouchEvent(MotionEvent ev)
如果事件能夠傳遞給當(dāng)前 View,那么此方法一定會被調(diào)用第练,返回結(jié)果受當(dāng)前 View 的 onTouchEvent 和下級 View 的 dispatchTouchEvent 方法影響, 表示是否消耗當(dāng)前事件篱昔; - 攔截
public boolean onInterceptTouchEvent(MotionEvent event)
返回結(jié)果表示是否攔截當(dāng)前事件每强; - 消耗
public boolean onTouchEvent(MotionEvent event)
用來處理點擊事件,返回結(jié)果表示是否消耗當(dāng)前事件州刽。
三個方法之間的關(guān)系
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consume = false;
if (onInterceptTouchEvent (ev)) {
consume = onTouchEvent (ev);
} else {
consume = child.dispatchTouchEvent(ev);
}
return consume;
}
實例分析
dispatchTouchEvent 是事件分發(fā)的第一步空执,但是不太會去改寫這個方法,所以暫時不管穗椅。
View 的事件分發(fā)機制.png
備注
- 同一個事件序列是指從手指接觸屏幕那一刻起辨绊,到手指離開屏幕的那一刻結(jié)束,在這個過程中產(chǎn)生的一系列事件匹表,這個序列以 down 事件開始门坷,中間有數(shù)量不定的 move 事件,最后以 up 事件結(jié)束袍镀;
- 某個 View 一旦決定攔截默蚌,那么這一個事件序列都只能由它來處理,并且 onTnterceptTouchEvent 不會再被調(diào)用苇羡。