點擊事件的分發(fā)過程由3個很重要的方法來共同完成:
- 用來進(jìn)行事件的分發(fā)(由接受事件的父View進(jìn)行分發(fā))
public boolean dispatchTouchEvent(MotionEvent ev);
- 用來判斷是否攔截某個事件
public boolean onInterceptTouchEvent(MotionEvent ev);
- 用來處理點擊事件
public boolean onTouchEvent(MotionEvent ev);
三者關(guān)系可以用以下偽代碼表示:
public boolean dispatchTouchEvent(MotionEvent ev){
boolean consume = false;
if (onInterceptTouchEvent(ev)){ //是否被父View攔截
consume = onTouchEvent(ev); //是否被父View消耗
} else {
consume = child.dispatchTouchEvent(ev); //交給子View處理
}
}
流程圖如下:
View的事件分發(fā)