美文网首页
事件分发机制

事件分发机制

作者: 厚积方能薄发 | 来源:发表于2020-07-28 14:59 被阅读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

    相关文章

      网友评论

          本文标题:事件分发机制

          本文链接:https://www.haomeiwen.com/subject/tpmfrktx.html