美文网首页
事件分发总结

事件分发总结

作者: 莲_藕 | 来源:发表于2020-07-28 20:15 被阅读0次

ViewGroup:

dispatchTouchEvent 分发

ViewGroup接收到事件之后,根据dispatchTouchEvent决定是否分发下去

1、默认返回 super.dispatchTouchEvent(ev)方法,即默认分发事件

2、如果返回false;事件将不再分发,直接返回给上一层的onTouch方法,并且后面的事件将不再分发给当前ViewGroup,上层直接自己分发并消费掉

3、如果返回true,事件将不再分发并且由ViewGroup的dispatchTouchEvent 消费掉,后面的触摸事件也会同样被ViewGroup的dispatchTouchEvent 消费

onInterceptTouchEvent 拦截

ViewGroup的dispatchTouchEvent如果默认将事件分发下去,传递给onInterceptTouchEvent方法,由onInterceptTouchEvent方法决定是否拦截

1、默认返回super.onInterceptTouchEvent(ev)  即不拦截,事件继续传递

2、改为返回true,事件直接传递给ViewGroup的onTouchEvent方法消费,不再传递给ViewGroup中的View

3、如果返回false,事件将传递给ViewGroup中的View去处理

onTouchEvent 消费

如果ViewGroup中的onInterceptTouchEvent 默认不拦截事件,这时根据ViewGroup的onTouchEvent返回值来判断

1、默认返回super.onTouchEvent(event),事件将传递给ViewGroup中的View进行处理,如果ViewGroup中View不消费事件,事件将会返回给ViewGroup的onTouchEvent方法处理,ViewGroup的onTouchEvent方法默认不处理,返回给上层的onTouchEvent方法处理

2 、如果返回true,,事件也会传递给ViewGroup中的View进行处理,如果ViewGroup中View不消费事件,事件将会返回给ViewGroup的onTouchEvent方法,这时ViewGroup的onTouchEvent直接将事件消费掉,不返回上层的onTouchEvent方法了

3、如果返回false,事件将默认由ViewGroup传递给View,View不处理又返回给ViewGroup的onTouchEvent,ViewGroup的onTouchEvent返回false,所以事件又返回给上层的onTouchEvent方法

View:

dispatchTouchEvent 分发

View接收到事件后,根据dispatchTouchEvent方法返回值,判断是否继续分发

1、默认返回super.dispatchTouchEvent(ev),事件将分发下去,传递给View自己的onTouchEvent进行处理,

2、如果返回false,事件将不分发,直接返回给上层ViewGroup的onTouchEvent方法进行处理

3、如果返回true,事件也不再分发,直接由View的dispatchTouchEvent 进行消费,并且以后的事件同样直接被View的dispatchTouchEvent 方法消费了

onTouchEvent 消费

如果View的dispatchTouchEvent 将事件传递给onTouchEvent方法,将根据onTouchEvent方法的返回值决定是否消费事件

1、默认返回super.onTouchEvent(event),默认不消费事件,事件将返回给上层ViewGroup的onTouchEvent方法处理

2、如果改为true,将事件消费,不再返回,以后其他事件同样被onTouchEvent方法消费

3 、如果改为false,同默认方法一样,不再消费,返回给上层处理

所以,触摸事件的所有流程已经很清晰了

对于事件分发:(dispatchTouchEvent)

如果想事件不向下传递,自己消费掉:将当前的dispatchTouchEvent返回true;

如果想事件不向下传递,返回给上层:将当前的dispatchTouchEvent返回false;

对于事件拦截:(onInterceptTouchEvent)

如果想拦截事件,给自己的onTouchEvent方法消费:将onInterceptTouchEvent返回true

如果不拦截事件,默认向下传递:将onInterceptTouchEvent返回false或者返回默认值

对于事件消费:(onTouchEvent)

如果不想消费,返回给上层:将onTouchEvent返回默认或者返回false;

如果想消费,不再返回:将onTouchEvent返回true;

相关文章

  • 七、事件分发

    1.事件分发的总结 事件分发顺序:Activity(Window) -> ViewGroup -> View 事件...

  • View事件分发---正文

    简介事件分发起源事件分发---正片ViewGroup的事件分发第1部分:第2部分:第3部分View的事件分发总结滑...

  • 事件分发总结

    文章链接 www.jianshu.com/p/38015afcdb58# 事件分发的简单说明 www.cnblog...

  • 事件分发总结

    ViewGroup: dispatchTouchEvent 分发 ViewGroup接收到事件之后,根据dispa...

  • Android事件分发机制 & 面试解析

    先总结一下事件分发机制的流程 事件分发从Action_Down开始,最初由Activity的dispatchTou...

  • Android事件分发之基础

    转载自Android事件分发之基础Android 事件分发机制是比较重要的一块内容,总结一下 Android 事件...

  • Android关于事件分发导图及分发机制

    View 事件分发 首先说说View的事件分发机制,虽然前面已经总结过一次了,不过在这里再总结一次。 dispat...

  • Android事件分发机制

    Android事件分发机制 前言:网上有很多关于Android事件分发的文章,但大多是基于使用经验或者Log来总结...

  • 【总结】事件分发机制

    通常,开发人员所涉及到的事件分发机制涉及到了如下几个方法 dispatchTouchEvent(MotionEve...

  • 事件分发机制总结

    引用: https://developer.android.com/training/gestures/viewg...

网友评论

      本文标题:事件分发总结

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