美文网首页
Android事件分发机制——实验结果

Android事件分发机制——实验结果

作者: XX杰 | 来源:发表于2020-07-02 13:58 被阅读0次

本文是自己测试实际代码得出的结果。布局内容是LinearLayout-->ReleativeLayout-->Button
情况一 (方法为默认方法)

// ACTION_DOWN             = 0;
// ACTION_UP               = 1;
 @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        LogUtils.logv(" CustomerLinearLayout --->   onInterceptTouchEvent");
        return super.onInterceptTouchEvent(ev);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        LogUtils.logv(" CustomerLinearLayout --->   dispatchTouchEvent  " + ev.getAction());
        return super.dispatchTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        LogUtils.logv(" CustomerLinearLayout --->   onTouchEvent");
        return super.onTouchEvent(event);
    }
微信截图_20200702105525.png

如果CustomerLinearLayout 的dispatchTouchEvent 返回true则结果为


微信截图_20200702110328.png

只执行他自己的dispatchTouchEvent方法,且两次(ACTION_DOWN和ACTION_UP)
如果返回false,则只有ACTION_DOWN事件,没有ACTION_UP事件,dispatchTouchEvent只执行一次

由上面可以知道,根据dispatchTouchEvent的返回结果有三种情况,super.dispatchTouchEvent()、true、false

如果CustomerLinearLayout 的onInterceptTouchEvent 返回true(只有 dispatchTouchEvent返回super方法时),则结果为


3.png

此时执行onTouchEvent()方法。onInterceptTouchEvent的源码默认返回false。

当CustomerLinearLayout 的dispatchTouchEvent 返回的是super方法的时候。
这个时候看CustomerRelativeLayout

如果dispatchTouchEvent 返回true。则与CustomerLinearLayout 的情况一致。CustomerRelativeLayout的dispatchTouchEvent 方法执行两次(ACTION_DOWN和ACTION_UP)
如果dispatchTouchEvent 返回false。则会执行其父类的onTouchEvent(),且流程执行一次,只有ACTION_DOWN事件


4.png

如果如果CustomerRelativeLayout 的onInterceptTouchEvent 返回true,(只有 dispatchTouchEvent返回super方法的时候)


7.png

总结如下
同名方法时 super方法


20190120122256828.png

相关文章

网友评论

      本文标题:Android事件分发机制——实验结果

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