`

Android的事件分发onInterceptTouchEvent与onTouchEvent、OnClickListener、OnLongClick

 
阅读更多
onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截.
1.down事件首先会传递到onInterceptTouchEvent()方法。
2.如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return false,那么后续的move,up等事件将继续会先传递给该ViewGroup,只有当onInterceptTouchEvent返回true的时候才结束onInterceptTouchEvent事件并传递给最终的目标view的onTouchEvent()处理,但是childView将接收不到任何事件。
3.如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return true,那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGroup的onTouchEvent()处理。并且,childView将接收不到任何事件。
4.如果最终需要处理事件的view的onTouchEvent()返回了false,表示View可以可以继续执行其他监听,如OnClickListener、OnLongClick。
5.如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理,但是其他的监听将不再执行,如OnClickListener、OnLongClick。
6.view的onTouchEvent默认返回值为false;
该View是怎么响应这个点击动作的呢?

          首先,该View会先响应ACTION_DOWN事件,并返回一个boolean值,这里有两种判断:

                a:返回True,表示该View接受此按下动作,就是说这个点击动作的按下操作被中止,然后就是响应ACTION_UP事件。点击动作的按下操作被ACTION_DOWN接受之后就结束了,所以之后的OnClick/OnLongClick事件就不会响应了。

                b:返回false,表示该View不接受此按下动作,响应完之后,按下操作继续往下发,之后是响应ACTION_UP事件,这里又有一个判断:

如果ACTION_UP事件返回True,表示ACTION_UP接受松开操作,松开操作中止;View会一直处于按下状态,之后View便会响应OnLongClick事件。

如果ACTION_UP事件返回false,表示ACTION_UP不接收松开操作,松开操作继续下发;因为按下与松开操作都没有被中止,所以之后View就会响应OnClick事件。
分享到:
评论

相关推荐

    android事件分发机制

    4. **onClickListener** 和 **onLongClickListener**:这两种方法通常与按钮等控件关联,分别用于处理点击事件和长按事件。 5. **onTouchListener**:触摸事件监听器,可以在任何类型的视图上设置,用于处理各种触摸...

    完全理解android事件分发机制

    但是源码的复杂往往会让新手产生畏惧难以理解,于是笔者最终还是打算使用实例log来让读者理解android事件分发。 #重要函数 笔者此次主要提及最常用的几个函数: (其间区别看源码很容易理解,此处直接给上结果) **...

    谈谈对Android View事件分发机制的理解

    首先,我们要明白Android事件分发机制涉及三个主要方法:`onTouchEvent()`, `dispatchTouchEvent()` 和 `onInterceptTouchEvent()`。 1. **事件传递流程**: - 当用户触摸屏幕时,事件首先被Activity捕获,然后...

    Android事件的分发机制详解

    在分发过程中,`dispatchTouchEvent()` 负责将事件传给子View,`onInterceptTouchEvent()` 允许 ViewGroup 在事件到达具体子View之前拦截事件,而 `onTouchEvent()` 是处理实际的触摸事件。 在上述示例代码中,一个...

    Android从源码的角度彻底理解事件分发机制的解析(上)

    首先,我们需要了解事件分发涉及的主要方法:`dispatchTouchEvent()`、`onTouchEvent()` 和 `onInterceptTouchEvent()`。当用户在屏幕上触摸时,系统会生成一个MotionEvent,然后通过事件分发机制将这个事件传递给...

    Android事件分发与消费

    事件分发和消费我们主要涉及到以下三个方法:dispatchTouchEvent():分发事件onInterceptTouchEvent():拦截事件onTouchEvent():处理事件还需要注意常用的两个接口对以上方法的影响:OnClickListener:点击事件监听...

    android面试题目整理

    Android面试中的事件分发机制是开发者必须掌握的关键知识点之一,涉及到UI交互的底层逻辑。事件分发主要处理用户与屏幕的交互,例如点击、滑动等操作。在Android中,事件分发涉及到MotionEvent的传递流程,从...

    android之Touch事件处理机制测试

    1. OnTouchListener和OnClickListener:在同一个View上同时设置OnTouchListener和OnClickListener可能会导致滑动事件与点击事件冲突。通常,可以通过在OnTouchListener中判断ACTION_UP事件来避免点击事件的触发。 2...

    Android事件传递机制Demo.zip

    2. **事件分发**:事件分发主要涉及`dispatchTouchEvent()`、`onInterceptTouchEvent()`和`onTouchEvent()`这三个方法。 - **dispatchTouchEvent()**:Activity或ViewGroup接收到事件后,首先调用此方法进行分发。...

    Android中父View和子view的点击事件

    Android系统的事件分发主要由View的`dispatchTouchEvent()`、`onTouchEvent()`、`onInterceptTouchEvent()`三个方法协同完成。通过阅读源码,我们可以更深入地理解点击事件的处理流程,这对于优化性能和解决复杂场景...

    Android 点击事件demo

    事件分发链包括`dispatchTouchEvent(MotionEvent event)`、`onTouchEvent(MotionEvent event)`和`onInterceptTouchEvent(MotionEvent event)`三个方法。`dispatchTouchEvent`在最上层,将事件分发给子View或自己...

    android 事件监听机制

    事件分发链包括`dispatchTouchEvent()`、`onInterceptTouchEvent()`和`onTouchEvent()`三个关键方法。 3. **触摸事件(MotionEvent)** 触摸事件是Android中最常见的事件类型,包括ACTION_DOWN(手指触摸屏幕)、...

    Touch事件分发

    【Touch事件分发】在Android系统中,触摸事件(Touch事件)是用户与屏幕交互的主要方式,涉及到Activity、View和ViewGroup之间的事件传递。本文将深入解析Android中的触摸事件分发机制,帮助开发者理解并更好地处理...

    android面试题集锦(珍藏)

    ### Android事件分发机制详解 #### 一、事件分发机制概述 在Android开发中,事件分发机制是非常重要的一个概念。理解这一机制有助于开发者更好地处理用户交互,并且能够优化应用性能。本节将深入探讨Android事件...

    android触屏事件之activity,view,viewgroup

    Android的触屏事件处理遵循“事件分发链”这一概念。事件首先到达Activity,然后由Activity将事件分发给最底层的View。如果该View未处理事件,事件将沿着事件分发链逐级返回,直到找到能处理事件的组件或者事件被...

    android事件分析

    在Android系统中,事件处理是应用交互的核心部分,它涵盖了用户与设备间的各种交互,如触摸屏幕、按键操作等。本文将深入探讨Android事件分析,包括事件传递机制、事件监听器以及常见事件类型的处理。 首先,...

    028-Android事件响应机制

    在Android系统中,事件响应机制是用户界面与应用程序交互的核心组成部分。它决定了用户在屏幕上触摸、滑动或者点击按钮等操作如何被正确处理并转化为相应的应用程序行为。Android事件响应机制主要包括事件的产生、...

    Android事件处理

    然后,事件会通过View的 dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent 这些方法在View树中进行分发。 1. `dispatchTouchEvent`:此方法在View树的根部开始调用,负责将事件分发给子View。如果某个子...

    Android事件机制测试项目

    当事件发生时,Android会按照View-ViewGroup-Activity的顺序依次调用dispatchTouchEvent()、onTouchEvent()、onInterceptTouchEvent()来决定事件的处理。默认情况下,事件会从顶级View组开始向下分发,如果某个View...

    008_android 之 常见事件响应的实现方式对比

    在Android开发中,事件响应是用户与应用交互的关键部分,理解和掌握不同的事件处理方式对于创建高效、用户体验良好的应用至关重要。本教程"008_android 之 常见事件响应的实现方式对比"深入探讨了Android中几种常见...

Global site tag (gtag.js) - Google Analytics