美文网首页Android自定义View
完全解析Android事件传递和处理机制

完全解析Android事件传递和处理机制

作者: 小七在简书 | 来源:发表于2020-10-15 10:25 被阅读0次

    基础Demo程序结构示意图

    image.png

    最基本的布局

    • MainActivity是最外层布局

    • OutView继承ViewGroup

    • InnerView继承View

    系统默认的事件流向(点击InnerView)

    image.png

    针对这三个方法,职责和造成的影响如下

    image.jpeg

    下面分几种情况介绍一下

    1. 当覆写MainActivity中的dispatchTouchEvent方法的时候

    • true和false,都会导致事件直接结束传递,因为没有父节点了,所以事件无法向上传递
    image.png

    2. 当覆写OuterView中的dispatchTouchEvent方法的时候

    • 当返回值为 true 的时候,直接结束在此方法中结束事件传递
    image.png
    • 当返回值为 false 的时候,事件会回传到父节点(MainActivity)的onTouchEvent方法中
    image.png

    3. 当覆写OuterView中的onInterceptTouchEvent方法的时候

    • 当返回值为 true 的时候,阻止事件向下传递,转到自己的onTouchEvent中
    image.png
    • 当返回值为 false 的时候,对本次事件传递不会有影响
    image.png

    4. 关于覆写各个节点中的onTouchEvent方法的时候

    • 这个方法有个特点就是,如果默认不做任何处理,各个节点的onTouchEvent方法执行的顺序一定是从里到外的(这里默认点击的是最里层View);当有节点对事件进行处理后,后续事件也会发送过来处理
    4.1. MainActivity中返回true、false或者super都没什么区别,最后还是会回到MainActivity中

    Down事件

    image.png

    MOVE、UP等后续事件

    image.png
    4.2. OuterView中返回true

    Down事件

    image.png

    MOVE、UP等后续事件

    image.png
    4.3. OuterView中返回false

    Down事件

    image.png

    MOVE、UP等后续事件

    image.png
    4.4. InnerView中返回true

    Down事件

    image.png

    MOVE、UP等后续事件

    image.png
    4.5. InnerView中返回false

    Down事件

    image.png

    MOVE、UP等后续事件

    image.png

    这样,所有的方法的影响基本就列举完整了,但是大多数情况下都是需要组合起来使用。基本就是系统事件传递主线中可以随时进行介入,根据每个方法的特性,去合理安排介入时机来完成事件的合理分发处理。

    相关文章

      网友评论

        本文标题:完全解析Android事件传递和处理机制

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