阅读《Android开发艺术探索》提炼实践总结
所谓事件分发?
所谓点击事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。
点击事件的分发过程有三个很重要的方法来共同完成!
dispatchTouchEvent(MotionEvent ev)
用于事件的分发。如果事件能够传递给当前View,那么此方法一定会被调用,返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent方法的影响,表示是否消耗当前事件。
onInterceptTouchEvent(MotionEvent event)
View没有这个方法,Activity也没有,只有ViewGroup才有
在dispatchTouchEvent方法中调用,用来判断是否拦截摸一个事件,如果当前View拦截了某个事件,那么在同一个事件序列当中,此方法不会被再次调用,返回结果表示是否拦截当前事件。
onTouchEvent(MotionEvent event)
在dispatchTouchEvent方法中调用,用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前View无法再次接收到事件。
这三个方法的关系时什么呢?
我超级喜欢下面的伪代码,将关系道的淋漓尽致
public boolean dispatchTouchEvent(MotionEvent ev) { boolean consume = false; if (onInterceptTouchEvent(ev)) { consume = onTouchEvent(ev); } else { consume = child.dispatchTouchEvent(ev); } return consume; }
一些需要注意的小tips:
- 传递机制:Activity->Window->View,即事件总时先传递给Activity,Activity在传递给Window,最后Window在传递给顶级View,顶级View接收到事件后,就会按照事件分发机制去分发事件。
- 如果所有的元素都不处理这个事件,那么这个事件最后将会传递给Activity,即Activity的onTouchEvent方法会被调用。
- ViewGroup默认不拦截任何事件。
- View的onTouchEvent默认都会消耗事件(返回true),除非它是不可点击的(clickable和longClickable同时为false)。View的longClickable属性默认都为false,clickable属性要分情况,比如Button的clickable属性默认为true,TextView的clickable属性默认为false。
- View的enable(作用时设置其是否可用)属性不影响onTouchEvent的默认返回值。
- 事件传递过程时由外向内的,即事件总是传递给父元素,然后在由父元素分发给子View,通过requestDisallowInterceptTouchEvent方法可以在子元素中干预父元素的事件分发过程,但是ACTION_DOWN事件除外。
相关推荐
在Android开发中,View事件分发机制是理解用户交互与响应的关键部分。本文将深入探讨这一主题,以解决文中遇到的问题:LinearLayout中的TextView和Button点击事件处理不一致。首先,我们要明白Android事件分发机制...
在Android开发中,事件分发机制是理解和优化用户交互体验的关键环节。本文将深入探讨"view的事件分发机制demo2",并基于链接提供的详细...因此,深入研究"view的事件分发机制demo2"将对Android开发技能的提升大有裨益。
本源码结合博客地址: https://blog.csdn.net/gaoxiaoweiandy/article/details/89840433 讲述了View的事件分发机制以及如何阅读与分析源码。
Android View 事件分发机制是Android用户界面交互的基础,它决定了触摸事件如何在视图层次结构中传递和处理。在Android开发中,理解和掌握这一机制至关重要,因为它涉及到UI的响应性和用户体验。 首先,事件分发...
总的来说,Android的View事件分发机制是一个深度话题,涉及多个组件和方法的协同工作。通过"TestEventFlow"这样的实践项目,开发者能够更直观地理解事件如何在View层次结构中流动,从而更好地设计和优化用户界面的...
事件分发机制是Android系统处理用户触摸事件的关键流程,理解这一机制对于优化UI交互和处理复杂视图层次结构至关重要。本文将深入探讨Android点击事件的分发过程,包括事件的产生、传递和处理。 首先,当用户在屏幕...
在Android系统中,事件分发机制是用户与应用程序交互的核心环节。它决定了用户在屏幕上点击、滑动等操作如何被正确地处理和响应。本文将深入探讨Android事件分发机制,帮助开发者理解这一关键概念。 首先,我们从...
在Android开发中,事件分发机制是至关重要的一个部分,它决定了用户与界面交互时,事件如何在不同的组件之间传递和处理。本文将基于“Android事件分发机制全解析Demo”进行深入探讨,并通过实际的代码示例来帮助你更...
在博客文章“Android自定义View的事件分发机制(一)”中,作者jsonnan详细阐述了这些概念,并可能通过实例代码展示了如何在自定义View中实现自定义的事件分发逻辑。通过阅读这篇文章,开发者可以更深入地理解...
ion of this abstract class is `...总的来说,Android事件分发机制是UI交互的基础,理解它可以帮助我们创建更高效、更符合用户预期的界面。在开发过程中,可以通过调试和日志来跟踪事件的传递路径,以优化交互逻辑。
在Android开发中,事件分发机制是理解和优化用户交互界面不可或缺的部分。...通过实践`android事件分发机制Demo`,你可以直观地看到事件如何在View和ViewGroup之间传递,从而加深对这一机制的理解。
本文将深入解析Android的Touch事件分发机制,并通过一个名为"EventDispatchTest"的示例来说明。 1. **事件分发流程** Android中的触摸事件分发分为三个阶段:`dispatchTouchEvent()`, `onInterceptTouchEvent()`, ...
在Android开发中,事件分发机制是理解和优化用户交互界面不可或缺的部分。本文将深入探讨“Android事件分发机制总结Demo”,结合代码实例MyTouchEventDemo,帮助开发者清晰理解这一核心概念。 事件分发机制主要涉及...
### Android 事件分发机制详解 #### 一、引言 在Android开发中,事件处理是用户界面交互设计的核心组成部分。对于开发者来说,理解事件如何被分发到各个控件中至关重要,因为这直接影响到应用的用户体验。本文将从...
在Android开发中,事件分发机制是至关重要的一个部分,它决定了用户与界面元素交互时的行为。本小Demo主要展示了Android事件分发的过程,并通过一系列的日志截图来帮助理解这一机制。下面,我们将深入探讨Android...
### Android事件分发机制详解 #### 一、触摸事件涉及的核心类 在Android系统中,触摸事件主要由两类核心对象负责处理:`ViewGroup` 和 `View`。 1. **ViewGroup**:作为容器,继承自 `View`,用于容纳多个 `View`...
在Android系统中,触摸事件的处理是通过一个复杂的分发机制来实现的,这个机制确保了用户在屏幕上点击或滑动时,相应的视图能够正确地接收到并响应这些动作。下面将详细介绍Android中触摸事件的分发机制,以及如何在...