美文网首页安卓技术
安卓技术-Touch事件传递

安卓技术-Touch事件传递

作者: 七色瑾林 | 来源:发表于2020-02-16 10:26 被阅读0次

一、事件回调

  1. Activity-ViewGroup-View,dispatchTouchEvent-onTouchEvent。
    其中,ViewGroup中还包含onInterceptTouchEvent。
  2. 返回false(部分需要super)则事件继续传递,返回true拦截事件,都是。
  3. View的onTouchEvent默认返回true,除非不可点击(clickable),因为点击和长按的判断需要消费事件。
    注:事件与enable无关,即是否enable都不影响事件传递。

二、事件流程

缩写:

d:down
m:move
u:up
A:Activity
G:ViewGroup
V:View
D:dispatchTouchEvent
I:onInterceptTouchEvent
T:onTouchEvent

1. 不拦截(View也是返回false)

d: AD-GD-GI-VD-VT-GT-AT
m/u:AD-AT

说明:不拦截down事件,则move/up事件不会继续向下传递,直接由Activity消费。

2. Touch拦截(消费)

ViewGroup拦截:
d: AD-GD-GI-VD-VT-GT
m/u:AD-GD-GI-GT
View拦截:
d: AD-GD-GI-VD-VT
m/u:AD-GD-GI-VD-VT

说明:Touch拦截将消费事件,即事件不再传递,且move/up事件将直接传递给消费down事件的组件。

3. Intercept拦截

d: AD-GD-GI-GT-AT
m/u:AD-AT

说明:Intercept拦截会停止事件分发并改变事件传递方向,使事件立即反向传回。
如果GT消费了事件,则m/u直接AD-GD-GT,不会再经过Intercept拦截。
另外,onTouchListener优先于onTouchEvent,即前者如果消费事件,则后者不会受收到。

4. dispatch拦截

d/m/u:AD/AD-GD/AD-GD-VD

说明:dispatch拦截,将会立即终止事件分发,包括后续的事件。
dispatch很特殊,默认是返回true的,即拦截事件需要返回false。
另外,该方法必须super,否则事件无法分发。
实际上,intercept就是在dispatch中调用的。

相关文章

  • Touch事件传递 个人分析

    安卓的Touch事件传递处理主要与三个方法有关,分别为 传递——dispatchTouchEvent()函数、 拦...

  • Touch分发的结论

    Touch传递 Touch事件先传递到Activity,然后ViewGroup,再传递到View。 Touch分发...

  • 安卓事件传递机制

    事件传递机制 View dispatchTouchEvent():分发事件 onTouchEvent():处理事件...

  • Android的NestedScroll机制

    Android Touch事件的传递 Activity接收Touch事件回调onTouchEvent,并且将Tou...

  • Touch事件的传递机制笔记

    Touch事件传递 事件序列:ACTION_DOWN, ACTION_MOVE, ACTION_UP Touch事...

  • Android知识点总结

    Touch事件传递流程: 事件都是从Activity.dispatchTouchEvent()开始传递 事件由父V...

  • View:事件传递流程

    1 Touch事件底层传递过程 Touch的整体派发流程,遵循如下逻辑: Android中Touch事件的分发分服...

  • IOS开发中的事件处理总结

    一、先了解touch事件,这是所有的基础 UIApplication控制着touch事件,包括事件的传递(就是查找...

  • Android触摸事件分发机制

    一 概述 触摸事件的分发机制是安卓开发中的基础知识,但这块知识又有点绕,总是让人觉得似懂非懂。其实安卓事件传递就是...

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

网友评论

    本文标题:安卓技术-Touch事件传递

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