Android触摸事件的分发处理

Android Input子系统 - 触控事件处理机制 最后借用业界大牛做的一张图来描述Android系统触控事件处理机制的整体全貌作为总结。 阅读详情

        Android中的触摸事件很常见,但是处理起来却不一定简单。


        比如说,一个最简单的屏幕触摸动作:按下,滑动,抬起。这个触摸动作会触发一系列的触摸事件:ACTION_DOWN->ACTION_MOVE->...->ACTION_MOVE->ACTION_UP。而当屏幕中包含一个ViewGroup,而这个ViewGroup又包含多子view时,Android系统对触屏动作的响应是如何处理的呢?


        在这之前,需要先看看下面这三个与TouchEvent密切相关的函数:


        1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent

        2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent

        3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent


        当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, 进入这个 view 的 dispatchTouchEvent函数 ,然后由  dispatchTouchEvent 进行分发。如果返回值为true ,则交给这个view的onTouchEvent处理;如果返回值为 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件。


        然后,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,还是会交给它的 onTouchEvent 来处理;如果 interceptTouchEvent 返回 false ,那么就传递给子 view (在这里就是次顶层的view),由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。


        后面的可以以此类推。如果事件传递到某一层的view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。


        关键的就是上一段的最后一句话了,这也是最容易出现问题的地方。上文说到“接收不到下一次事件”,那什么是下一次事件呢?文章一开始就提到:一个最简单的屏幕触摸动作:按下,滑动,抬起,会触发一系列的触摸事件:ACTION_DOWN->ACTION_MOVE->...->ACTION_MOVE->ACTION_UP。如果最上面的View的onTouchEvent一直是返回false的话,那我们就只能监听到TouchEvent的ACTION_DOWN事件,而ACTION_MOVE和ACTION_UP都是无法接收到的。


        这有什么用呢?在一些时候,比如说我们想要响应某一个Button,但是我们希望是手指离开屏幕时才触发相关的操作。举一个例子,比如想象下你在游戏中时,不小心按下了退出按钮;而为了避免游戏退出,你移动手指到了屏幕上的其他地方,然后手指离开屏幕。在这种情况下,如果你希望游戏仍在继续,你就必须监听TouchEvent的ACTION_UP动作来响应退出操作,而最顶层的View也必须返回True才可以,否则我们是无法接受到ACTION_UP这个事件的。同样的,如果你的应用需要用到手势,也必须返回True,因为手势本质上只是对一系列的TouchEvent事件的封装而已,需要很多后续的触摸事件。但从另一方面来说,如果你的应用只需要ACTION_DOWN这个事件,也不需要用到手势,那样可以简单地返回false;这对提高性能和降低耗能也是有一定益处的,毕竟屏幕对触摸事件很敏感,短时间内就可以出发大量的触摸事件,全部都收归到程序上进行处理并没有什么好处。


        这篇文章是针对各种Android入门书籍的补充介绍,因为我发现这些书籍上对TouchEvent的说明很敷衍,但却很容易给读者(我)带来一些后面的问题,所以在此予以说明。

android触摸事件的分发和处理 这两天学习了下Android触摸事件。 记录下: 首先对事件的理解如下。 一个事件由down move up 三个动作组成,其中move动作可以有多个或者0个,但down 和up动作有且只有一个。这个三个动作中down是最先响应的,它是先驱,由它来决定move和up动作响应路线。 以event对象为主线,对事件分发和响应整个流程理解如下: (前提是在一个Activity,一个Linear 阅读详情

相关推荐

Android触摸事件处理:单点触摸和多点触摸的区分与冲突解决

Android设备支持单点触摸和多点触摸,开发者需要准确地识别触摸事件的类型并解决可能出现的单点触摸和多点触摸的冲突。本文将介绍如何区分单点触摸和多点触摸,并提供相应的代码示例来解决单点触摸和多点触摸的冲突。例如,当用户用一个手指按下屏幕并保持不动时,另一个手指按下屏幕,此时会触发一个单点触摸事件和一个多点触摸事件。综上所述,我们可以通过区分单点触摸和多点触摸事件,并采取相应的处理策略来解决单点触摸和多点触摸的冲突。方法获取当前触摸屏幕的手指数量,我们可以在单点触摸事件中检测是否存在其他手指的触摸。

ByteWhiz的博客 589

安卓触摸事件

动作常量按下移动移开。

m0_63887380的博客 1520

[Android 13]Input系列--触摸事件在应用进程的分发和处理

Android 13前面我们已经梳理了input事件在native层的传递,这一篇我们接着探索input事件在应用中的传递与处理,我们将按键事件和触摸事件分开梳理,这一篇就只涉及触摸事件。

qq_40731414的博客 1426

Android触摸事件概述和处理方式

触摸事件 触摸事件处理是指对用户的触摸事件进行监听并响应的流程,掌握触摸事件能开发出更酷的应用,触摸操作在智能手机和平板电脑上的应用已经成为主流。 首先介绍一下触摸事件的一个类 MotionEvent 1.当用户触摸屏幕时,系统将自动创建MotionEvent对象,该对象保存用户触摸屏幕的相关数据,如触摸的坐标、压力、面积等。 2.MotionEvent位于android.view包下

差点是个靓仔 2906

使用模拟工具Modbus poll 和PLC 通讯

使用模拟工具Modbus poll 和PLC 通讯 简介 Modbus Poll 是一个模拟Modbus 主站的工具。不用在现场调试,在家也能使用,方便快捷的调试验证程序。使用它可以和PLC进行Modbus TCP /RTU 通讯等功能,接下来为大家介绍使用Modbus Poll 和 PLC 进行 Modbus TCP 通讯。 组态PLC PLC作为我们的从站和Modbus Poll 通讯,那我们组态一个PLC。 创建通信DB 创建一个DB块,在数据类型处输入:TCON_IP_V4

weixin_61398412的博客 1万+

AI办公Agent技术:文档与表格智能处理实践

办公自动化技术正从规则驱动转向语义理解,大语言模型(LLM)为办公Agent赋予了智能决策能力。这类系统通过五层架构整合自然语言处理、工具API调用和任务规划引擎,能自动完成文档分类、表格分析等高重复性工作。关键技术包括基于TF-IDF和BERT的特征提取、Excel公式自动生成等,在财务报告、法律审查等场景可实现90%以上的效率提升。随着多模态能力和领域专业化发展,办公Agent正在重塑企业文档处理流程,成为数字化转型的核心基础设施。

weixin_30263277的博客 519

3.2安卓触摸事件

单点触控,只能识别和支持每次一个手指的触控、点击,若同时有两个以上的点被触碰,就不能做出正确反应。很多医院、图书馆等的大厅都有这种触控技术的电脑,支持触摸屏的手机、MP3、数码相机也多采用这种单点触控技术。

qq_64880273的博客 1377

用Plecs搞定半桥LLC谐振变换器仿真:从开环模型搭建到闭环PI调参全流程

本文详细介绍了使用Plecs仿真工具进行半桥LLC谐振变换器从开环模型搭建到闭环PI调参的全流程操作。涵盖仿真环境准备、关键元件参数计算、波形异常排查、闭环控制实现及PI参数整定等核心内容,特别针对仿真中的收敛性问题提供实用解决方案,助力电力电子设计者高效完成LLC变换器仿真验证。

weixin_28455801的博客 569

android触摸事件分发与处理简述

android触摸事件分发与处理 android的分发机制:由父控件判断是否拦截,如果不拦截事件,则继续分发到子控件,然后一直分发下去。 处理:与分发相反,由子控件先处理事件,如果子控件不处理,则交给父控件处理,一直向上传递,直到那个控件处理了触摸事件 相关方法: Boolean dispatchTouchEvent(MotionEvent ev)接收到触摸事件时,是否分发

XST891205的博客 455

Altium Designer操作技巧(12)——如何进行邮票孔拼版?

【摘要】本文详细介绍了PCB设计中邮票孔拼板的全流程操作方法。首先解释了邮票孔拼板的定义、核心目的(提高贴片效率、方便生产)和适用场景(异形板、V-CUT无法实现的情况)。重点阐述了关键设计参数,包括孔径、数量、间隙等规范要求,并提供了两种具体操作方案:传统复制粘贴法和新版阵列放置法。文章通过图文详细演示了从PCB复制、邮票孔添加、板框定义到定位孔和Mark点设置的完整步骤,最后强调了对称性、非金属化孔等设计要点,以及需要与板厂确认工艺参数等注意事项。

u012526819的博客 1672

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

努力让自己发光,对的人才能迎着光而来 13万+

android面试题之触摸事件分发与处理简述

android触摸事件分发与处理     android的分发机制:由父控件判断是否拦截,如果不拦截事件,则继续分发到子控件,然后一直分发下去。     处理:与分发相反,由子控件先处理事件,如果子控件不处理,则交给父控件处理,一直向上传递,直到那个控件处理了触摸事件    相关方法:Boolean dispatchTouchEvent(MotionEvent ev)接收到触摸事件是否分发事

qq_35366908的博客 3185

ArcGIS Pro符号化教程

本文详细介绍了ArcGIS Pro的软件设置和符号化操作步骤。主要包括:1)设置默认工程目录和关闭地图自动加载;2)创建新工程的基本流程;3)点要素的单一符号化方法,包括样式修改和图层调整;4)图表符号显示过滤器的使用,涉及字段添加、图表类型选择和背景设置。文章还提供了操作截图和数据下载链接,适合GIS初学者学习ArcGIS Pro的基础符号化操作。

WwLK123的博客 548

Android 触摸事件分发和处理机制解析(一)Activity篇

在我们自定义view或者嵌套view时,经常需要处理滑动事件,点击事件等各种交互事件。在处理过程中,我们可能会遇到事件不响应,滑动和点击事件冲突等问题,这时候,如果我们理解Android触摸事件的分发和处理,处理起来就会得心应手。 刚开始接触Android触摸事件分发和处理机制的时候,往往会一头雾水,因为处理触摸事件的地方太多了。 比如,我们可以对某个activity里的view设置onTou...

本人整理的笔记与总结,涉及Android,Java,React,设计模式,算法等,愿对大家有帮助 1218

SCTPPortScan SCTP协议端口扫描、关联地址识别、传输状态检测

Windows:Winsock2+SCTP扩展)。- **SCTP API封装**:Linux下直接调用`socket()`、`connect()`、`getsockopt()`等系统函数,解析`struct sctp_status`和`struct sctp_paddrinfo`获取状态和关联地址。qDebug() << "开始SCTP扫描:" << ipList.size() << "个IP," << ports.size() << "个端口,共" << m_totalTasks << "个任务";

寒寒豆豆软件公司的博客 90

11、RK3566/3568 Android11切割屏幕 长条屏 显示

在使用 RK3566 平台进行 Android 11 开发时,遇到切割屏(长条屏)显示画面不全。本文将详细介绍如何配置,以及如何修改 HWComposer 来调整显示区域,解决图像缩放问题。我这边屏幕是lvds接口的,分辨率1920 1080实际的屏物理尺寸是1920x463。

qq_39451352的博客 251

Android 触摸事件的分发与处理流程:onInterceptTouchEvent和onTouchEvent

参考:Android事件传递机制【Touch事件】 我们对触摸事件的处理,印象最深的就是两个方法: onInterceptTouchEvent() 和 onTouchEvent().  其中, 1. onInterceptTouchEvent()是ViewGroup中的方法, 返回值决定该事件是否需要被 intercept 2. onTouchEvent()是 ViewGroup 和 Vi

cathuzi的专栏 734

深度学习工具包 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")

Android触摸事件的分发、拦截、处理

在Android触摸屏的过程中,有三个重要的方法,dispatchTouchEvent(事件分发)、onInterceptTouchEvent(事件拦截)、onTouchEvent(事件处理、消费)。  View、ViewGroup、Activity中都有dispatchTouchEvent,onTouchEvent方法;但是onInterceptTouchEvent只有ViewGroup中有。

七月的博客 5900

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android 触摸事件分发和处理机制解析(二)ViewGroup篇

本文未完成,持续更新中——————– 在看本片文章之前,建议花几分钟先看看我的上一篇,作为理论基础: Android 触摸事件分发和处理机制解析(一)Activity篇 不想看那么多的话,贴上上一篇最后的结论,记住这些再往下看: 1. 触摸事件是从Activity的 dispatchTouchEvent() 开始处理的。 2. Activity的dispatchTouchEvent(...

本人整理的笔记与总结,涉及Android,Java,React,设计模式,算法等,愿对大家有帮助 676

android 屏幕触摸事件的分发与处理

android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。  一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP 当屏幕中包含一个ViewGroup,而这个ViewGroup又包

GG之家 1543

Android触摸事件处理终极指南:深入理解ViewGroup中的手势管理与事件分发机制

Android触摸事件处理是构建流畅交互体验的核心技术,对于Android开发者来说,深入理解ViewGroup中的手势管理和事件分发机制至关重要。本文将全面解析Android触摸事件的分发流程、拦截机制以及实际应用技巧,帮助你掌握这一关键技能。 ## 为什么需要深入理解Android触摸事件分发? 在Android应用开发中,触摸事件的处理直接影响用户体验。当用户在屏幕上进行点击、滑动、缩放

gitblog_00353的博客 488

Android 触摸事件分发和处理机制解析(三)View篇

本文未完成,持续更新中——————– 在我们自定义view或者嵌套view时,经常需要处理滑动事件,点击事件等各种交互事件。在处理过程中,我们可能会遇到事件不响应,滑动和点击事件冲突等问题,这时候,如果我们理解Android触摸事件的分发和处理,处理起来就会得心应手。 本系列分析前两篇,建议先看看: Android 触摸事件分发和处理机制解析(一)Activity篇 Android 触摸...

本人整理的笔记与总结,涉及Android,Java,React,设计模式,算法等,愿对大家有帮助 587

Android view触摸事件分发dispatchTouchEvent 拦截 onInterceptTouchEvent 处理 onTouchEvent

首先,理解用户触摸操作引发的触摸事件在android中拆分为3个步骤 MotionEvent.ACTION_DOWN//按下事件 MotionEvent.ACTION_MOVE//移动事件 //结束事件 MotionEvent.ACTION_UP://按下直接抬 MotionEvent.ACTION_CANCEL://接下后触摸滑动后再抬起 然后,再了解,android的事件是怎么传播的 不...

qq_35772366的博客 887
上一篇: Android多点触控
下一篇: Android音量控制
Ederick
博客等级 码龄15年 20粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值