《Android开发艺术探索》——View事件分发机制

黑群晖断电后存储池‘已损毁’?别慌,SSH里这几条命令能救急 本文详细解析黑群晖断电后存储池显示‘已损毁’的紧急修复方法。通过SSH命令行工具,提供从诊断到修复的完整流程,包括RAID阵列重新组装、设备重建等关键步骤,帮助用户恢复数据访问。适用于因意外断电导致的存储池异常情况。 阅读详情

概念

同一个事件序列指的是从手指触摸屏幕的那一刻开始,到手指离开屏幕的那一刻结束,在这个过程产生的一系列事件。以down事件开始,可能经过n多个move事件,最终以up事件结束。

案例

自定义三个布局

<com.yolo.myapplication.view.FirstFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_view_demo"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_blue_bright"
    tools:context="com.yolo.myapplication.view.ViewDemoActivity">

    <com.yolo.myapplication.view.SecondRelativeLayout
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_gravity="center"
        android:background="@android:color/holo_green_dark">

        <com.yolo.myapplication.view.ThirdTextView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:clickable="true"
            android:background="@android:color/holo_red_light"
            android:layout_centerInParent="true" />

    </com.yolo.myapplication.view.SecondRelativeLayout>


</com.yolo.myapplication.view.FirstFrameLayout>

在这里插入图片描述

情况一

默认情况,未设置返回true或false,事件都是return super.onXXX(event);

I/FirstFrameLayout:     dispatchTouchEvent>>DOWN
I/FirstFrameLayout:     onInterceptTouchEvent>>>>DOWN
I/SecondRelativeLayout: dispatchTouchEvent>>DOWN
I/SecondRelativeLayout: onInterceptTouchEvent>>>>DOWN
I/ThirdTextView:        dispatchTouchEvent>>DOWN
I/ThirdTextView:        onTouchEvent>>>>DOWN
I/FirstFrameLayout:     dispatchTouchEvent>>UP
I/FirstFrameLayout:     onInterceptTouchEvent>>>>UP
I/SecondRelativeLayout: dispatchTouchEvent>>UP
I/SecondRelativeLayout: onInterceptTouchEvent>>>>UP
I/ThirdTextView:        dispatchTouchEvent>>UP
I/ThirdTextView:        onTouchEvent>>>>UP

在这里插入图片描述

情况二

ThirdTextView的onTouchEvent返回true。
日志和图例与情况一相同。

  • 结论:

正常情况下,一个事件序列只能被一个View拦截且消耗。

View的OnTouchEvent的事件默认都会消耗事件(返回true),因此未发生回传的现象。如果View是不可点击的(clickable和longClickable同时为false),则返回false。

  • 注意:
    View的longClickable默认都为false,clickable属性分情况:如Button的clickable属性默认为true,TextView的clickable属性默认为false。
    View的enable属性不影响onTouchEvent默认返回值。clickable和longClickable属性会影响。

情况三

FristFrameLayout的onTouchEvent返回true,SecondRelativeLayout和ThirdTextView的OnTouchEvent返回false。

I/Activity:             dispatchTouchEvent>>DOWN
I/FirstFrameLayout:     dispatchTouchEvent>>DOWN
I/FirstFrameLayout:     onInterceptTouchEvent>>>>DOWN
I/SecondRelativeLayout: dispatchTouchEvent>>DOWN
I/SecondRelativeLayout: onInterceptTouchEvent>>>>DOWN
I/ThirdTextView:        dispatchTouchEvent>>DOWN
I/ThirdTextView:        onTouchEvent>>>>DOWN
I/SecondRelativeLayout: onTouchEvent>>>>DOWN
I/FirstFrameLayout:     onTouchEvent>>>>DOWN
I/Activity:             dispatchTouchEvent>>UP
I/FirstFrameLayout:     dispatchTouchEvent>>UP
I/FirstFrameLayout:     onTouchEvent>>>>UP

图例:
在这里插入图片描述

  • 结论:

如果View一旦开始处理事件,如果它不消费Down事件,那么同一个时间序列的其他事件也不会再交给它,并且重新交给它的父元素去处理。例如红线的down事件流向。

情况四

SecondRelativeLayout 拦截事件,onInterceptTouchEvent返回true

I/Activity: 			dispatchTouchEvent>>DOWN
I/FirstFrameLayout: 	dispatchTouchEvent>>DOWN
I/FirstFrameLayout: 	onInterceptTouchEvent>>>>DOWN
I/SecondRelativeLayout: dispatchTouchEvent>>DOWN
I/SecondRelativeLayout: onInterceptTouchEvent>>>>DOWN
I/SecondRelativeLayout: onTouchEvent>>>>DOWN
I/FirstFrameLayout: 	onTouchEvent>>>>DOWN
I/Activity: 			onTouchEvent>>>>DOWN
I/Activity: 			dispatchTouchEvent>>UP
I/Activity: 			onTouchEvent>>>>UP

在这里插入图片描述

SecondRelativeLayout 拦截事件,onInterceptTouchEvent返回true,且onTouchEvent返回true

I/FirstFrameLayout:     dispatchTouchEvent>>DOWN
I/FirstFrameLayout:     onInterceptTouchEvent>>>>DOWN
I/SecondRelativeLayout: dispatchTouchEvent>>DOWN
I/SecondRelativeLayout: onInterceptTouchEvent>>>>DOWN
I/SecondRelativeLayout: onTouchEvent>>>>DOWN
I/FirstFrameLayout:     dispatchTouchEvent>>UP
I/FirstFrameLayout:     onInterceptTouchEvent>>>>UP
I/SecondRelativeLayout: dispatchTouchEvent>>UP
I/SecondRelativeLayout: onTouchEvent>>>>UP

View事件传递机制

  • 结论:

View一旦决定拦截,那么事件序列只能由它来处理,并且它的onInterceptTouchEvent不会被调用。比如SecondRelativeLayout拦截了Down事件,那么事件序列中的Up直接交给它处理,并且不会再去执行onInterceptTouchEvent。

  • 注意:
    事件传递由外向内,即事件总是县传递到父元素,然后再由父元素分发给子View,通过requestDisallowInterceptTouchEvent方法可以在子元素中干预父元素的事件分发过程。但是ACTION_DOWN事件除外。

注意

  • 当一个View需要处理事件时,如果它设置了OnTouchListener,那么这个接口的onTouch方法会被回调。如果onTouch方法返回true,则onTouchEvent不会被调用。因此OnTouchListener优先级高于onTouchEvent。

OnTouchListener > onTouchEvent > OnClickListener

  • View拦截了事件,那么事件序列中的其余事件则直接跳过onInterceptTouchEvent方法去执行onTouchEvent方法。是因为mFirstTouchTarget != null 的标记。
final boolean intercepted;
//如果子View处理了事件,mFirstTouchTarget != null 成立,为true。
//且此时传递的是时间序列的其余事件,不是Down事件,因此整个条件不成立。
//不会执行onInterceptTouchEvent
if (actionMasked == MotionEvent.ACTION_DOWN
		|| mFirstTouchTarget != null) {
	final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;
	if (!disallowIntercept) {
		intercepted = onInterceptTouchEvent(ev);
		ev.setAction(action); // restore action in case it was changed
	} else {
		intercepted = false;
	}
} else {
	// There are no touch targets and this action is not an initial down
	// so this view group continues to intercept touches.
	intercepted = true;
}
【LAMMPS学习】五、LAMMPS命令(8) Pair_style 势 所有LAMMPS pair_style命令如下表所示。有些样式有加速版本。这由括号中的附加字母表示:g = GPU, i = INTEL, k = KOKKOS, o = OPENMP, t = OPT。 阅读详情

相关推荐

【论文泛读|附源码】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

这一篇文章叫做 **数据驱动**的**坐标发现与方程发现算法**。想回答的问题很简单,就是根据数据写方程。 想想牛顿的处境,如何根据各种不同物体下落的数据,写出万有引力的数学公式的。这篇文章就是来做这件事的。当然,这篇论文并没有从牛顿视角,完全去思考牛顿所想。而是利用现有的**深度学习技术** 和 **动力学重构的方法** 。提出了一种框架,基于现有的计算机技术,去发现物质运动背后的物理规律。 这里直接给出这篇方法的核心思路图,我们后面会逐个讲解。

qq5q13638的博客 2456

Android的事件分发机制以及滑动冲突的解决

用一段伪代码来阐述上述三个方法的关系和点击事件传递规则 // 点击事件产生后,会直接调用dispatchTouchEvent分发方法 public boolean dispatchTouchEvent(MotionEvent ev) { //代表是否消耗事件 boolean consume = false; if (onInterceptTouchEvent(ev))...

我的专栏 965

解决屏幕不亮难题:慷智SerDes DE信号极性配置避坑指南

本文深入探讨了基于慷智AIM95x系列SerDes芯片的嵌入式显示系统开发中,因DE信号极性配置不匹配导致屏幕不亮的典型故障。文章详细解析了DE信号的核心作用与极性定义,提供了慷智SerDes芯片中DE极性寄存器的具体配置方法与调试记录,并给出了从隔离问题、对比时序到波形验证的系统性排查流程,帮助工程师快速定位并解决此类隐蔽问题。

weixin_29185493的博客 141

android开发艺术探索:View的事件分发机制

  在了解view的时间分发机制之前,我们先了解MotionEvent这个对象 MotionEvent 在手指接触屏幕后所产生的一系列事件中,典型的时间类型有如下几种:  ACTION_DOWN--------手机刚接触屏幕‘ ACTION_MOVE----------手指在屏幕上移动 ACTION_UP    -----------手指从屏幕上松开的一瞬间 上述三种情况是典型的事件序...

qq_35893839的博客 691

数仓建模—数据治理框架选型

全名主要亮点覆盖面最广:从数据治理、架构、质量、安全到元数据、主数据、数据仓库等等,几乎所有数据管理主题都能在DMBOK里找到相应章节。概念权威统一:帮助组织建立通用术语和知识基础,减少“部门之间说法不一致”的沟通成本。适用场景:如果你所在公司(或团队)正准备系统梳理数据管理的方方面面,DMBOK是一份非常全面的指导手册,尤其适合培养新人或为整个组织统一认知。需要注意:DMBOK偏“知识指引”,不直接提供成熟度模型或实施路线图。想要落地,还需要结合其他评估模型或项目管理方法。小案例举例:某。

2401_84052244的博客 4745

【MATLAB】工业传送带速度闭环控制与张力联合仿真

本文基于MATLAB/Simulink平台,构建了工业传送带速度闭环控制与张力联合仿真系统。通过搭建驱动模块、机械传动模块、检测模块和控制模块,实现了速度与张力的协同控制。采用双PID调节器分别整定速度与张力参数,经联合调试后系统性能良好:速度跟踪误差小于±0.03m/s,张力波动控制在±30N内,负载扰动恢复时间仅0.3秒。研究提供了从建模到参数优化的完整工程方案,可直接应用于课程设计或工业实践,有效解决了传送带运行中速度偏差与张力波动的协同控制难题。

unber的博客 78

Android——View的事件分发机制(学习Android开发艺术探索)

点击事件的事件分发(其实就是对MotionEvent事件的分发过程),当一个MotionEvent产生以后,系统需要把这个事件传递给某个View,这就是分发过程。 此分发过程主要由三个方法组成: public boolean dispatchTouchEvent(MotionEvent ev):用于事件的分发,若事件传递给当前的View此方法就会被调用,返回结果受当前View的onTouchEv

LCY天上殿的博客 642

【Flutter 问题系列第 85 篇】Xcode 运行 Flutter 提示 The Dart VM Service was not discovered after 60 seconds.

在 Xcode 上运行 Flutter 时提示 `The Dart VM Service was not discovered after 60 seconds. This is taking much longer than expected...`,意思是 `60秒后未发现Dart虚拟机服务。这比预期的要长得多`

“Allen Su”的博客 2238

Android中View的事件分发机制——Android开发艺术探索笔记

点击事件的事件分发就是对MotionEvent事件的分发过程,当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发的过程。

SparkYuan 4021

流体仿真软件:COMSOL Multiphysics二次开发_(3).流体仿真基础理论

流体仿真基础理论包括流体的基本性质、流体运动方程、边界条件、初始条件、湍流模型和网格生成等。在使用COMSOL Multiphysics进行流体仿真时,正确设置这些参数和条件是获得准确仿真结果的关键。通过实际应用案例,可以更好地理解如何在COMSOL中进行流体仿真,并提取和分析仿真结果。希望本文对流体仿真初学者和从业人员有所帮助。

kkchenjj的博客 1341

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4376

Android艺术开发探索——3.View事件分发机制

1.点击事件的传递规则 点击事件的事件分发就是对MotionEvent事件的分发过程,当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,这个传递过程就是分发过程。当一个点击事件产生后,一般顺序事件先传递到Activity,再传递到ViewGroup,最终传到View。 点击事件的分发过程由三个很重要的方法共同完成: ...

xuan的博客 208

Unity GameObject 核心机制深度解析:从底层结构到工程实践

从底层机制讲透 Unity GameObject:托管壳加原生芯的双层对象模型如何制造假 null 陷阱、Transform 层级与组件通信的原理、生命周期回调的确切顺序。文章同时给出 Instantiate 成本分析与对象池等高频场景的工程实践。

游戏人生 40

《Android开发艺术探索》之View事件分发机制

有3个重要方法: dispatchTouchEvent(MotionEvent ev) onInterceptTouchEvent(MotionEvent ev)如果当前View拦截了事件,那么同一个事件序列当中,此方法不再调用。 onTouchEvent(MotionEvent ev)传递规则顺序:Activity—->Window(PhoneWindow)—->Vi

RonaldoWang Blog 551

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

View的事件分发机制——Android开发艺术探索笔记

View事件分发机制在Android系统中,当一个MotionEvent产生以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是事件分发过程。点击事件的分发过程由三个很重要的方法来共同完成:dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent。public boolean dispatchTouchEvent(MotionEve

qq_34305735的博客 506

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android开发艺术探索知识回顾——第3章 View的事件体系:3、View的事件分发机制、滑动冲突

3.4 View的事件分发机制 上面几节介绍了 View的基础知识以及View的滑动,本节将介绍View的一个核心知识点:事件分发机制。事件分发机制不仅仅是核心知识点更是难点,不少初学者甚至中级开发者面对这个问题时都会觉得困惑。 另外,View的另一大难题滑动冲突,它的解决方法的理论基础就是事件分发机制,因此掌握好View的事件分发机制是十分重要的。本节将深入介绍View的事件分发机制,在3.4.1节会对事件分发机制进行概括性地介绍,而在3.4.2 节将结合系统源码...

鲁迷那的专栏—坚持实践后再写出来! 501

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

读《android开发艺术探索》笔记一:View的事件分发机制

View的事件分发机制:对于一个根viewgroup来说,点击事件产生后,首先会传递给它,这是它的dispatchTouchEvent就会被调用,如果这个viewGroup的OnInterceptTouchEvent方法返回true就表示它要拦截当前事件,接着事件就会交给这个viewGroup处理,即它的onTouchEvent方法就会被调用;如果这个ViewGroup的OnInterceptTou

WoAiLuoWenXin的专栏 811

基于GLM-5.3后训练的漏洞挖掘实践:从LoRA微调到部署全流程

代码安全分析正从规则匹配走向语义理解,大模型通过后训练可以在漏洞挖掘任务中输出结构化、可验证的结论。后训练并非简单记忆漏洞字典,而是让模型对齐“漏洞类型、触发位置、原因解释、修复建议”的输出格式,并掌握数据流向与危险函数调用链的判断逻辑。借助LoRA微调,安全团队可以较低显存成本对开源模型进行定制,使模型适配内网审计、SRC合规测试等场景。以智谱开源GLM-5.3为例,可构建一套最小可复现的流程,涵盖训练数据设计、LoRA调参、推理验证、指标评估以及生产部署。同时,还需关注数据隔离、模型幻觉和合规边界,模型

weixin_34127717的博客 316

Android开发艺术探索学习-View的事件分发机制(二)

这节主要是透过源码来分析触摸事件是如何从Activity传递到View中。

chan1116的专栏 986

Android开发艺术探索学习-View的事件分发机制(一)

View的事件分发机制是很重要的一个知识点,特别是一些复杂的自定义View,我们需要重写其事件分发的相关方法,以防止事件冲突。与事件分发相关的主要方法如下:

chan1116的专栏 696

View的事件分发机制(Android开发艺术探索学习笔记)

当一个触摸事件发生的时候,事件首先传递给当前的Activity,由Activity的dispatchTouchEvent(MotionEvent ev)进行分发。代码如下: /** * Called to process touch screen events. You can override this to * intercept all touch scree

ting说你跳? 665

Android知识点总结(二)View的事件体系

VIEW的基础知识 MotionEvent和TouchSlop MotionEvent getX/getY: View相对于父容器的x和y坐标 getRawX/getRawY: 相对于屏幕左上角的x和y坐标 TouchSlop TouchSlop是系统能识别的滑动的最小距离! 和设备有关,不同设备的值可能不一样,通过ViewConfiguration.get(getContext).g...

孙朝阳的博客 473

Android开发艺术探索读书笔记(第一章)

..

刘国栋的博客 300

《Android开发艺术探索》读书笔记--第3章 View的事件体系

文章目录3.1 View基础知识3.1.1 什么是View3.1.2 View 的位置参数3.1.3 MotionEvent 和 TouchSlop3.1.4 VelocityTracker、GestureDetector 和 Scroller3.2 View滑动 3.1 View基础知识 3.1.1 什么是View View 是 Android 中所有控件的基类,是一种界面层控件的抽象。 Vi...

soleil雪寂 638

分享一些行业经验,成功入职阿里

前言 不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。 如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大。 最近看到很多Android新手问Android学习路线,学习方法啊,如何入门啊,所以我从网上找了一些资料,然后以我的工作经验给大家总结一下,让你们少走弯路,提取一些工作中经常用到的技术。 这里总结一下,Android入门的时候,需要有一本入门书,好好学习书中的内容,同时花一年时间把Android官方文档中的tra

青山绿轻舟 108

Android面试知识点总结宝典助你通关!成功入职腾讯

Android没凉,只是比以前难混了 多年前Android异军突起,成了新的万亿级市场,无数掘金人涌入,期待可以一展拳脚。 那时候大环境下的手游圈,只要你能有个可以运行的连连看就能找到工作,走上赛道被浪潮推着前进,这个行业不可谓不光明。 如今浪潮速度放缓,漫天飞舞着唱衰Android的讯息,“凉凉”是最多的字眼。 但放心,Android真的没凉! Android入门相对简单,初级Android很多很多,趋近饱和,你随意打开一个招聘app就能很直观的判断出来,现在Android准入的条件越来越高了。 这里总

左夜天 111
上一篇: 《Android开发艺术探索》阅读笔记——View事件体系(一)
下一篇: 5个Android开发中比较常见的内存泄漏问题及解决办法
青菜小王子
博客等级 码龄11年 1695粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青菜小王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值