美文网首页
事件分发学习总结2

事件分发学习总结2

作者: 吃饱了就送 | 来源:发表于2020-06-13 15:53 被阅读0次
布局结构

所有事件返回值都为:return super.TouchEvent(event)

E/ActivityToucEvent: dispatchTouchEvent: 0
E/ParentLayout: dispatchTouchEvent: 0
E/ParentLayout: onInterceptTouchEvent: 0
E/NestedParentLayout: dispatchTouchEvent: 0
E/NestedParentLayout: onInterceptTouchEvent: 0
E/ChildView: dispatchTouchEvent: 0
E/ChildView: onTouchEvent: 0
E/NestedParentLayout: onTouchEvent: 0
E/ParentLayout: onTouchEvent: 0
E/ActivityToucEvent: onTouchEvent: 0
E/ActivityToucEvent: dispatchTouchEvent: 1
E/ActivityToucEvent: onTouchEvent: 1

底层View是具有事件的优先消费权的,onTouchEvent最先被调用

ChildView onTouchEvent返回true

E/ActivityToucEvent: dispatchTouchEvent: 0
E/ParentLayout: dispatchTouchEvent: 0
E/ParentLayout: onInterceptTouchEvent: 0
E/NestedParentLayout: dispatchTouchEvent: 0
E/NestedParentLayout: onInterceptTouchEvent: 0
E/ChildView: dispatchTouchEvent: 0
E/ChildView: onTouchEvent: 0
E/ActivityToucEvent: dispatchTouchEvent: 1
E/ParentLayout: dispatchTouchEvent: 1
E/ParentLayout: onInterceptTouchEvent: 1
E/NestedParentLayout: dispatchTouchEvent: 1
E/NestedParentLayout: onInterceptTouchEvent: 1
E/ChildView: dispatchTouchEvent: 1
E/ChildView: onTouchEvent: 1

跟上面对比发现:

  • 如果View 没有对 ACTION_DOWN 进行消费,此次点击的后续事件不会传递过来;
  • 如果 View 消费了 ACTION_DOWN ,此次点击的后续事件会直接给这个 View,这里的后续事件指的是 ACTION_MOVE 和 ACTION_UP 事件;此时,其父 ViewGroup 的 onIntercept 函数仍会被调用,仍能进行拦截,但它自己的 onIntercept 不会被调用了;

NestedParentLayout onInterceptTouchEvent返回true

E/ActivityToucEvent: dispatchTouchEvent: 0
E/ParentLayout: dispatchTouchEvent: 0
E/ParentLayout: onInterceptTouchEvent: 0
E/NestedParentLayout: dispatchTouchEvent: 0
E/NestedParentLayout: onInterceptTouchEvent: 0
E/NestedParentLayout: onTouchEvent: 0
E/ParentLayout: onTouchEvent: 0
E/ActivityToucEvent: onTouchEvent: 0
E/ActivityToucEvent: dispatchTouchEvent: 1
E/ActivityToucEvent: onTouchEvent: 1

若拦截事件但在onTouchEvent中未消费(返回true),事件还是会通过onTouchEvent 向上传递

NestedParentLayout dispatchTouchEvent返回false

E/ActivityToucEvent: dispatchTouchEvent: 0
E/ParentLayout: dispatchTouchEvent: 0
E/ParentLayout: onInterceptTouchEvent: 0
E/NestedParentLayout: dispatchTouchEvent: 0
E/ParentLayout: onTouchEvent: 0
E/ActivityToucEvent: onTouchEvent: 0
E/ActivityToucEvent: dispatchTouchEvent: 1
E/ActivityToucEvent: onTouchEvent: 1

若dispatchTouchEvent返回false,则本层不再向下传递,将事件传递给上层onTouchEvent

相关文章

  • 事件分发学习总结2

    所有事件返回值都为:return super.TouchEvent(event) 底层View是具有事件的优先消费...

  • View事件分发---正文

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

  • 七、事件分发

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

  • 事件分发学习总结1

    事件分发总结2 dispatchTouchEvent return true:表示该View内部消化掉了所有事件r...

  • Activity事件分发

    1.View的事件分发2.ViewGroup的事件分发3.Activity的事件分发 在View的事件分发最后有个...

  • Android事件分发机制笔记

    阅读:最全android分发机制讲解 1、事件分发对象为事件(MotionEvent对象) 2、事件分发的本质,将...

  • 事件分发总结

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

  • 事件分发总结

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

  • ViewGroup的事件分发

    1.View的事件分发2.ViewGroup的事件分发3.Activity的事件分发 上篇本来想把Activity...

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

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

网友评论

      本文标题:事件分发学习总结2

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