事件分发机制

2020-07-28  本文已影响0人  厚积方能薄发

初级

首先事件的分发是从上级一层层往下级传递,设定一个场景,Activity上有ViewGroup,而ViewGroup中有View,分发的过程分别是从Activity分发到ViewGroup再到View。
说到事件分发,涉及到3个方法,分别是dispatchTouchEvent interceptTouchEvent onTouchEvent,interceptTouchEvent 只有ViewGroup有,它负责拦截事件的传递,如果它决定拦截,那么消息不会向下传递。

中级

了解事件分发机制,首先得知道事件作用在什么上,事件会作用Activity、ViewGroup、View,而它们三者拥有不同的事件分发机制:

Activity事件分发机制:

if (event.getAction == MotionEvent.ACTION_DOWN) {
        onUserInteraction();
}

if (getWindow.superDispatchTouchEvent()) {
        return true;
}

return onTouchEvent(event);

在onTouchEvent中判断点击事件是否在window的边界外,如果在边界外,返回true,消费掉事件,如果不在边界外,返回false。

ViewGroup:
事件从Activity传递过来,先调用dispatchTouchEvent,在其内部会判断是否进行拦截,如果拦截,自己来消费掉事件(onTouch、onTouchEvent、performClick、onClick),如果不拦截,则在其内部找到被点击的子控件,调用子控件的dispatchTouchEvent。

View:
事件从ViewGroup传递过来,先调用dispatchTouchEvent,在设置onTouch的情况下,并且enable为true,并且onTouch返回true时,将不会执行onTouchEvent,在上面任何条件不成立的情况下都会执行onTouchEvent。在onTouchEvent中,只要View可点击就一定会返回true,若控件不可点击就一定会返回false。

image.png
上一篇下一篇

猜你喜欢

热点阅读