触摸事件的传递过程

倍福ADS通讯协议深度解析——从握手到数据包的完整旅程 本文以工程师视角,通过Wireshark抓包实战,深度解析了倍福ADS通讯协议的完整工作流程。从TCP三次握手建立连接,到拆解AMS/TCP信封、AMS Header地址与命令解析,再到ADS Data读写请求的载荷构成,完整呈现了一次数据通讯的“旅程”。文章重点剖析了协议包格式,并结合实际案例,提供了基于协议分析的故障排查思路,帮助开发者深入理解并精准调试工业自动化系统通讯。 阅读详情

这里主要介绍Activity、View、ViewGroup三者的触摸事件传递机制,一次完整的事件传递主要包括三个阶段,分别是事件的分发、拦截和消费。触摸事件对应的是MotionEvent类,事件的类型主要有三种:ACTION_DOWN、ACTION_MOVE、ACTION_UP。

分发:事件的分发对应着dispatchTouchEvent方法,在这个方法中,根据当前视图的具体实现逻辑,来决定是直接消费这个事件还是将事件继续分发给子视图处理,方法返回值为True表示事件被当前视图消费掉,不再继续分发事件;方法返回super.dispatchTouchEvent表示继续分发该事件。

拦截:事件的拦截对应着onInterceptTouchEvent方法,该方法只在ViewGroup及其子类中才存在,在View和Activity中是不存在的。这个方法也是通过返回的布尔值来决定是否拦截对应的事件,返回true标识拦截这个事件,不继续分发给子视图,同时交由自身的onTouchEvent方法进行消费;返回false或super.onInterceptTouchEvent表示不对事件进行拦截,需要继续传递给子视图。

消费:事件的消费对应着onTouchEvent方法,该方法返回true表示当前视图可以处理对应的事件,事件将不会向上传递给父视图;返回值为false表示当前视图不能处理这个事件,事件会被传递给父视图的onTouchEvent方法进行处理。

在Android个系统中,拥有事件传递能力的类有以下三种:

--Activity:拥有dispatchTouchEvent和onTouchEvent两个方法

--ViewGroup:拥有dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent三个方法

--View:拥有dispatchTouchEvent和onTouchEvent两个方法

View类的触摸事件的传递过程如下:

--触摸事件的传递流程是从dispatchTouchEvent开始的,如果不进行人为干预(也就是默认返回父类的同名函数),则事件将会依照嵌套层次从外层向内层传递,到达最内层的View时,就由它的onTouchEvent方法处理。该方法如果能够消费该事件,则返回true,如果处理不了,则返回false,这时事件会重新向外层传递,并由外层View的onTouchEvent方法进行处理,依次类推。

--如果事件在向内层传递过程中由于人为干预,事件处理函数返回true,则会导致事件提前被消费掉,内层View将不会收到这个事件。

--View控件的事件触发顺序是先执行onTouch方法,在最后才执行onClick方法。如果onTouch返回true,则事件不会继续处理,最后也不会调用onClick方法;如果onTouch返回false,则事件继续传递。

ViewGroup是作为View控件的容器存在的,常见的ViewGroup的子类有LinearLayout、RelativeLayout、FrameLayout、ListView、ScrollView等。ViewGroup的触摸事件传递过程如下:

--触摸事件的传递顺序是由Activity到ViewGroup,再由ViewGroup递归传递给它的子View。

--ViewGroup通过onInterceptTouchEvent方法对事件进行拦截,如果该方法返回true,则事件不会继续传递给子View。

--在子View中对事件进行消费后,ViewGroup将接收不到任何事件。

华为od 面试手撕代码题【完成任务最少小时】 阅读详情

相关推荐

别再死记硬背了!一张图搞懂无刷电机半桥与全桥驱动的核心差异(附避坑指南)

本文深入解析无刷直流电机的半桥与全桥驱动方式的核心差异,提供直观对比与选型指南。半桥驱动结构简单、成本低,适合低要求场景;全桥驱动性能优越但复杂,适用于高精度控制。文章还包含实战避坑指南,帮助工程师优化驱动方案选择与应用。

weixin_29290947的博客 319

Android View控件的事件派发

Android View控件的事件派发

zq2114522的专栏 2365

红外弱小目标检测:IPI算法解读及MATLAB复现

参考文献:[1]C. Gaoet al., “Infrared Patch-Image Model for Small Target Detection in a Single Image,” vol. 22, no. 12, pp. 4996–5009, 2013. 本文整理????论文笔记,并附MATLAB实现代码。 一、阅读笔记 1. 摘要 IPI算法是单帧检测算法; 利用背景的非局部子相关性(non-local self-correlation ofbackground),将目标检测转..

小草莓的魔法笔记 1万+

自定义控件之触摸事件的传递

1、dispatchTouchEvent方法: 每个

duncan891101的专栏 1109

网络设备心跳线带宽高导致虚拟化平台不稳定的问题处理

本文记录了网络设备心跳线带宽高导致虚拟化平台不稳定的问题处理一例。

forestqq的博客 2228

【图像去噪】论文复现:大道至简!NAFNet的Pytorch源码复现!跑通NAFNet源码,补充PlainNet,由大到小拆解NAFNet网络结构,由小到大实现结构组合,逐行注释!

论文题目:Simple Baselines for Image Restoration —— 图像恢复的简单基线【图像去噪】论文精读:Simple Baselines for Image Restoration(NAFNet)本文以SIDD数据集为例,跑通NAFNet源码,详解NAFNet网络结构与实现。建议与KBNet和CGNet的复现文件综合查看。训练和测试代码解析见单独的BasicSR源码精读(后续会出)。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 2994

view传递事件的处理机制(自定义了viewGroup和LinearLayout做实验)

最近为了明白view时间处理传递机制,特此了做了实验,自定义了viewGroup和LinearLayout做实验,重写了dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent三个方法,总结了四种情况。 事先在脑袋里有这么一些概念: ACTION_DOWN //表示按下了屏幕  ACTION_MOVE //表示为移动手势  ACTION_U

zhou_shaowen的专栏 1659

零基础DSP实战TMS320F28035:第九节,ADC比较器&EPWM

ADC比较器框图如下所示:-电压-----------------------------输出-电压A>电压B------------------ 1-电压A

sinat_30943509的博客 2535

android 触摸事件传递机制

先运行拦截事件oninterceptTouchEvent(),再运行触摸事件onTouchEvent。 点击事件从上层到下层,事件回馈从下层到上层。 Android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法: 1)publicboolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent 2)

潇潇安宁的android学习 434

51单片机计算器(源程序+流程图+答辩报告+综合设计)

保姆级讲解!C语言编程,使用51单片机及LCD1602显示屏实现!

m0_57007304的博客 2万+

Spring AI Alibaba实战训练营-13语音生成应用开发指南

本文介绍了如何基于Spring AI Alibaba创建DashScope语音应用,支持文本转语音(TTS)和语音转文本(STT)功能。主要内容包括:1)环境准备要求Java 17+、Maven 3.6+及阿里云DashScope API Key;2)通过Spring Initializr创建项目并配置相关依赖;3)设置API密钥的安全配置方法;4)实现语音合成的同步和流式功能,包括创建控制器类、调用API接口及保存语音文件。文章提供了详细的代码示例和配置说明,帮助开发者快速搭建语音处理应用。

program哲学 403

android 向下传递触摸,Android触摸事件传递(下)

上一篇中,我说明了Android中Activity和View触摸事件的传递流程,现在我们来继续学习MotionEvent在View的容器ViewGroup中的传递过程。首先,ViewGroup继承于View,我们在开发中经常使用的LinearLayout,RelativeLayout,FrameLayout等都继承于ViewGroup,而Button,TextView,ImageView等都继承于...

weixin_30950075的博客 571

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)

qq_42135020的博客 2083

Android中触摸事件传递过程

Android中触摸事件传递过程

xfh001的专栏 410

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

详解Android 触摸事件处理和传递过程的来龙去脉

前言前面有两篇博客从源码角度分析了Android中View的触摸事件处理和ViewGroup的触摸事件传递过程,对于初学者来说可能直接从源码了解Android触摸事件有点门槛,那么这篇博客我们不分析源码,尽量用简介的语言和简单的例子来详细解释Android触摸事件的处理和触摸事件传递的过程。Android触摸事件流程简述这里我将触摸事件理解为两部分: 触摸事件的传递过程 触摸事件的处理过程 触摸事件

废墟的树的专栏 4635

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

触摸事件的顺序,事件传递过程

触摸事件的顺序:从父控件传递到子控件,找到最合适的控件来处理是件 1.自己是否能够接受触摸事件 2.触摸点是否在自己身上 3.从后往前遍历子控件,重复前面两个过程 4。如果没有符合条件的子控件,那么就自己最合适 事件传递过程: 1.如果view的控制器存在,就传给控制器,如果不存在则传递给他的父视图 2.在视图层次结构的最深层视图,如果也不能处理,则穿个window对象进行处

fanhaofei1234的博客 552

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

触摸事件传递过程

http://blog.youkuaiyun.com/xyz_lmn/article/details/12517911

qq_31860607的博客 277

Android触摸事件传递机制,这一篇就够了

整个触摸事件牵涉到的是,Activity,View,ViewGroup三者的传递机制。 这个触摸事件就是从外层往内层一层层的传递。 整个传递机制,分为3个步骤:分发,拦截,和消费。 1. 触摸事件的类型 事件类型是MotionEvent类:看下最新的sdk29的源码,一堆的Action,我们常用的其实就3个,ACTION_DOWN,ACTION_MOVE,ACTION_UP。 Down和Up事...

HuaZi_Myth的博客 659

Android 触摸事件传递机制

Android 触摸事件传递机制 前言:我们在开发中经常遇到多个view和viewGroup嵌套的问题,为了快速解决这类问题,开发者需要对view事件有一个交深的理解 1.1触摸类型 action_down 手指按下事件 action_move 手指滑动事件 action_up 手指抬起事件 一般手指抬起和按下事件是一定能监听到 move事件就不一定能监听到位 1.2事件

自古深情留不住,总是套路得人心 448

Android 控件的触摸事件传递与处理

了解Android控件的触摸事件传递与处理对我们日常开发中自定义控件和触摸事件冲突解决有重大意义。Android控件的触摸事件传递和处理主要有以下几个方法,下面一一介绍

青春的光与影 5466

Android中触摸事件传递分发机制

触摸事件用MotionEvent表示,在Android中,一个触摸事件从产生到最终起作用,是一个很复杂的过程,但思路还是很清晰的,就是一层一层的传递,通过一个boolean值判断是否拦截或者消耗(也就是使用掉这个事件)。下面从基础的事件产生过程开始梳理整个流程:事件的类型:一般使用手机,在屏幕上的操作就是点击或滑动,所以一般触摸事件分为两类: 点击事件:ACTION_DOWN–>ACTION_UP

classTC的博客 1156

关于Android触摸事件TouchEvent的传递及截取,研究心得。

之前一直经常使用Touch的相关

RockCode_li的专栏 1525

触摸事件的传递

触摸事件的传递过程: 1、先判断父控件是否能接收触摸事件,如果不能就不再往下遍历它的子控件;如果能再判断触摸点是否在自己身上 2、如果触摸点自己身上就往下遍历子控件;如果触摸点不在自己身上就不再往下遍历而是往前找同级的控件进行遍历 关于UIImageView对触摸事件的响应:

Snip_的专栏 383

android触摸事件传递

最近在学习触摸事件,找了很多资料,不过感觉这篇文章更清晰一些,非常感谢作者的分享,原文地址:http://www.2cto.com/kf/201501/371516.html Activity没有onInterceptTouchEvent方法,默认实现都是直接往下传递。 1、3个触摸事件控制方法的含义及其返回值的意义: onInterceptTouchEvent onInt

ouruolaxuhui的专栏 592
上一篇: android 集成第三方静态库的编译方法
下一篇: ANR产生的原因
makeyourprogress
博客等级 码龄11年 26粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值