首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MotionEvent中的ACTION_CANCEL和ACTION_UP有什么区别?

在Android开发中,MotionEvent是用于处理触摸事件的类。其中,ACTION_CANCEL和ACTION_UP是MotionEvent的两个常量,表示不同的触摸事件类型。

  1. ACTION_CANCEL:表示触摸事件被取消。当父容器拦截了触摸事件或者发生了意外情况(如突然来电),当前的触摸事件序列会被取消,即触摸事件的处理被中断。ACTION_CANCEL通常在ACTION_DOWN之后触发,用于通知应用程序取消当前的触摸操作。
  2. ACTION_UP:表示触摸事件结束。当用户松开手指时,会触发ACTION_UP事件。它标志着触摸事件的结束,可以用于执行最终的操作,例如处理点击事件或手势识别。

区别:

  • ACTION_CANCEL是触摸事件被取消,而ACTION_UP是触摸事件结束。
  • ACTION_CANCEL通常在ACTION_DOWN之后触发,而ACTION_UP在用户松开手指时触发。
  • ACTION_CANCEL用于通知应用程序取消当前的触摸操作,而ACTION_UP用于执行最终的操作。

推荐的腾讯云相关产品和产品介绍链接地址:

腾讯云提供了丰富的云计算产品和服务,包括云服务器、云数据库、云存储等。您可以访问腾讯云官方网站了解更多详情:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android面试老生常谈的 View 事件分发机制,看这一篇就够了!

4.ACTION_CANCEL 当前 View 的手势被打断,后续不会再收到任何事件 从 ACTION_DOWN 开始到 ACTION_UP/ACTION_CANCEL 结束我们称为一个事件序列 正常情况下...-> ACTION_UP 某些情况下,我们可能会没有收到 ACTION_UP 事件,是收到 ACTION_CANCEL 事件。...对于一些复位或者重置操作,我们应该在 ACTION_UP 和 ACTION_CANCEL 里面同时进行处理。...dispatchTouchEvent和 onTouchEvent的框里有个【true---->消费】的字,表示的意思是如果方法返回true,那么代表事件就此消费,不会继续往别的地方传了,事件终止。...目前所有的图的事件是针对ACTION_DOWN的,对于ACTION_MOVE和ACTION_UP我们最后做分析。

68420
  • View事件分发机制源码解析

    和 ACTION_UP 等事件的一些重置状态 if (canceled || actionMasked == MotionEvent.ACTION_UP...= null 的情况。 mFirstTouchTarget 不为空的话,代码里处理的都是除了 ACTION_DOWN 的事件,也就是 ACTION_MOVE 和 ACTION_UP 事件。...这样,以后的事件就完全移交给 ViewGroup 了,没子 View 什么事了。 最后就是对 ACTION_CANCEL 和 ACTION_UP 事件的一些状态重置。...当然也有一些不完善的地方,比如事件是怎样传递给 Activity 的在本文中没有涉及到,想了解的同学可以看下这篇《Android中MotionEvent的来源和ViewRootImpl》,任大神的作品。...References Android中MotionEvent的来源和ViewRootImpl Android 事件分发机制源码攻略(二) —— ViewGroup篇

    37340

    Android进阶——多点触控

    单点触控 Android 触摸事件处理的核心方法为onTouchEvent(MotionEvent event) onTouchEvent(MotionEvent event) 方法中可以接收到完整触摸事件流...下面是一个完整事件流的例子: ACTION_DOWN ---> ACTION_MOVE ---> ....... ---> ACTION_MOVE ---> ACTION_UP (或者ACTION_CANCEL...ACTION_DOWN: 手指按下事件, 一次事件流中只触发1次,是事件起始的标志 ACTION_MOVE: 手指移动事件 ACTION_UP : 手指抬起 ACTION_CANCEL:...通过这个两个函数可以获取当前手指在屏幕中的位置。 ACTION_MOVE 时不断获取最新的手指位置,就能够判断手指移动的方向和距离,从而更新对应view的位置。...每个触摸到view的手指都会包含 index 和 id数据。 index 和 id 变化规则如下: 1,index 从0 开始分配 2,index 在一个事件流中是会变化的。

    1.2K30

    Android View的事件分发机制

    触摸事件 在用户触摸屏幕时,总是离用户触摸点最近的控件来响应触摸事件,如果最近的控件没有实现响应事件,那这个事件会不断的向父类传递,直到有view响应时,就会将触摸反馈的事件流传递给这个view的onTouchEvent...2.触摸反馈事件流是以ACTION_DOWN开始,以ACTION_UP或者ACTION_CANCEL结束的一组事件,例如: 按钮点击事件的触摸反馈事件流 ACTION_DOWN -> ACTION_MOVE...-> ACTION_MOVE -> ACTION_UP 被中止事件的触摸反馈事件流 ACTION_DOWN -> ACTION_MOVE -> ACTION_CANCEL 事件拦截 现在有如下这样的一种场景...tips: 1. onTouchEvent() 函数中只有ACTION_DOWN时返回true才是有效的,若ACTION_DOWN没有返回true,那么后续的事件流也就不会再进来了,和这个view也就无缘了...1. onInterceptEvent() 函数中可以在最开始ACTION_DOWN时返回false,然后再之后的事件流中来判断是否需要开始拦截本次事件流,也就是说可以在之后事件流的过程中来判断是否达到触发拦截条件

    35510

    Android自定义系列——14.MotionEvent

    MotionEvent在android的触摸事件中起到了很重要的作用,本文主要介绍MotionEvent,简要介绍触摸事件,主要包括 单点触控、多点触控、鼠标事件 以及 getAction() 和 getActionMasked...Android 将所有的输入事件都放在了 MotionEvent 中: 版本号 更新内容 Android 1.0 (API 1 ) 支持单点触控和轨迹球的事件。...手指落下(ACTION_DOWN) -> 多次移动(ACTION_MOVE) -> 离开(ACTION_UP) 本次事例中 ACTION_MOVE 有多次触发。...ACTION_UP 最后一个 手指 离开屏幕 时触发。 ACTION_POINTER_DOWN 有非主要的手指按下(即按下之前已经有手指在屏幕上)。...(参数中的 pointerIndex 就是 actionIndex) 获取压力(接触面积大小) MotionEvent支持获取某些输入设备(手指或触控笔)的与屏幕的接触面积和压力大小,主要有以下方法:

    2.1K10

    简述android触屏事件的处理_移动端touch事件有哪些

    在一个触屏事件序列的多个事件中,同一个pointer拥有相同的id,但是index可以不同。 这里只讨论MotionEvent中关于touch event的部分。...在MotionEvent类中定义了一系列的int常量来表示各种预定义的操作类型。列举如下。...ACTION_CANCEL 这个事件比较特殊,它和上述事件都不一样,上述事件都是由用户在屏幕上操作所触发的,但是这个事件是由系统自动产生的。当一个事件序列需要提前终止的时候由系统自动产生此事件。...结合上面触屏事件序列的描述可以知道,一个正常的触屏事件序列一定是以ACTION_DOWN为开始,以ACTION_UP为结束,中间可以有0个或多个ACTION_MOVE, 如果是多点触摸,中间还会有若干次的...一个提前终止的触屏事件序列一定是以ACTION_DOWN为开始,以ACTION_CANCEL为结束,中间可以有0个或多个ACTION_MOVE, 如果是多点触摸,中间还会有若干次的ACTION_POINTER_DOWN

    1.3K10

    Android触摸事件_android设置按钮点击事件

    在Android系统中,手势的识别是通过 .OnGestureListener接口来实现的,利用,摸屏的Fling、Scroll等方法可以进行滑动或翻页效果的实现;触摸屏相关的事件,是通过onTouchListener...我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN, ACTION_MOVE, ACTION_UP, 和ACTION_CANCEL。...ACTION_DOWN是指按下触摸屏,ACTION_MOVE是指按下触摸屏后移动受力点,ACTION_UP则是指松开触摸屏; 当我们捕捉到Touch操作的时候,如何识别出用户的Gesture?...这里我们需要GestureDetector.OnGestureListener接口的帮助,实现如下例子: @Override public boolean onTouch(View v, MotionEvent...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    3.2K20

    Android事件分发原理分析

    事件,当然如果你没抬手,只是吧触碰点移动出了控件的范围,那应该是发生ACTION_CANCEL事件(这个有些手机可能不会发生ACTION_CANCEL事件而是发生ACTION_UP事件),这才是一个完整的触摸动作...image.png MotionEvent.ACTION_UP的传递 上面提到,一个单点完整的触摸动作是从ACTION_DOWN开始,并以ACTION_UP或者ACTION_CANCEL结束的,ACTION_UP...方法开始往下逐层传递,这边可通过对比Button和TextView对于ACTION_UP的不同处理作比较: Button与TextView对于ACTION_UP的区别,Buton是可点击的isClickable...和ACTION_UP的传递结果打印: 12-06 00:10:27.258 13203-13203/?...事件,这些都是在onTouchEvent中在ACTION_UP来的时候处理判断的,因此如果OnTouchListener这里把触摸事件拦截了,那OnClickListener和OnLongClickListener

    1.2K30

    View,ViewGroup的Touch事件的分发机制

    == MotionEvent.ACTION_CANCEL);   if (isUpOrCancel) {   //如果是ACTION_UP或者ACTION_CANCEL, 将disallowIntercept...才会走到这里, 假如在ACTION_MOVE或者ACTION_UP拦截的 //Touch事件, 将ACTION_CANCEL派发给target,然后直接返回true //表示消费了此Touch...是对onTouchEvent()方法的一个屏蔽和扩展作用,假如你有不一样的理解,你也可以告诉我下,这里就不纠结这个了。...Touch事件的,而一般的View既不是clickable也不是longclickable的(即不会消费Touch事件,只会执行ACTION_DOWN而不会执行ACTION_MOVE和ACTION_UP...ACTION_DOWN中执行,点击事件是在ACTION_UP中执行,要想执行长按事件,这个View必须是longclickable的, 也许你会纳闷,一般的View不是longClickable为什么也会执行长按事件呢

    1.2K70

    Android触摸事件传递(下)

    上一篇中,我说明了Android中Activity和View触摸事件的传递流程,现在我们来继续学习MotionEvent在View的容器ViewGroup中的传递过程。  ...很明显,我们的按钮的触摸事件和它的父容器的触摸事件,都触发了,这是因为,我们EventBtn的onTouchListener方法和onTouchEvent方法都返回false,没有消费触摸事件,事件会向上继续传递...我们也很好读懂,如果事件是ACTION_UP或者ACTION_CANCEL,表示触摸结束,但是还有第三种是 如果触摸事件是ACTION_DOWN 并且result==false,同样停止嵌套的触摸事件传递...,即后面的ACTION_MOVE,ACTION_UP都不会触发,因为在我们上面的例子中,没有消费触摸事件,返回的都是false,所以只触发了ACTION_DOWN事件。...关于Android中ViewGroup的触摸事件传递就介绍到这里,难免很多地方有错误纰漏,但是我能够坚持把这些写出来,我觉得我已经有一点小小的提高了,很开心~~

    1.1K10

    教你简单实现RecyclerView自动滚动

    当RecyclerView内容过多,超出屏幕的时候,需要让它自己滚动展示数据,尤其是某些Android设备处于高处,或是不可被触摸点击的,这样的情况下,让其自己滚动展示数据尤为重要了 自动滚动的方案有很多种...,目前比较常见又最简单的一种是:继承至RecyclerView,并实现runnable方法,每间隔10ms(delayTime)就去执行scrollby(x,y)方法,其中delayTime和x,y的值决定了滚动速度...,即在ACTION_DOWN的时,停止滚动线程,在ACTION_UP、ACTION_CANCEL时再开启线程。...if (running) stop() MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_OUTSIDE...Integer.MAX_VALUE,然后在获取数据的时候,用position和data.size()取余来获取实际的记录的索引值即可。

    1.1K40

    你必须知道的Android事件传递

    前言 在Android开发中,Android的事件传递可谓比较重要,是一块比较重要的知识体系,不管是日常开发还是面试中熟悉整套的传递机制都尤为重要,Android 事件传递 其实是Android输入子系统的一部分...最终会调用到输入焦点的3个方法:使用setKeyListener注册的监听器的onKey,之后是onKeyDown和onKeyUp,或者调用activity的onKeyDown和onKeyUp方法,也就是兜底处理无人处理的...在View及其子类中没有重写操作 dispatchPointerEvent在View中的实现为 public final boolean dispatchPointerEvent(MotionEvent...: } onTouch内进行了 ACTION_DOWN、ACTION_MOVE、ACTION_UP、ACTION_CANCEL相关处理 这里简版给出来长按及点击的逻辑,在ACTION_DOWN时会发送一个...500毫秒的 长按Runnable 检测,如果到了500毫秒,还没有接收到ACTION_UP事件则认为是一个长按点击,如果在500毫秒内接收到了ACTION_UP则认为是一个点击事件 走OnClick

    2.4K156

    android viewgroup事件分发机制

    ,以及对冲突进行处理~ 1、案例 首先我们接着上一篇的代码,在代码中添加一个自定义的LinearLayout: package com.example.zhy_event03;   import ...mMotionTarget.dispatchTouchEvent(ev) 3、ACTION_UP中,ViewGroup捕获到事件,然后判断是否拦截,如果没有拦截,则直接调用mMotionTarget.dispatchTouchEvent...(ev) 当ACTION_MOVE时return true ,即拦截了子View的MOVE以及UP事件; 此时子View希望依然能够响应MOVE和UP时该咋办呢?...从源码也可以解释: ViewGroup MOVE和UP拦截的源码是这样的: if (!...true了,那么子View是木有办法的捕获事件的~~~ 4、如果没有找到合适的子View 我们的实例,直接点击ViewGroup内的按钮,当然直接很顺利的走完整个流程; 但是有两种特殊情况 1、ACTION_DOWN

    97560

    JavaScript 中 == 和 === 有什么区别?

    == 和===运算符一直是热门讨论的话题。让我们看看这两者有何不同。 双等号(==) 符号检查松散相等,而三等号(===) 符号检查严格相等。...;//Output:false 示例 1 在示例 1 中,您可以看到使用两个等号 (==) 返回 true,因为字符串“2”在进行比较之前已转换为数字2,但使用 (===) 三个等号可以看出类型是不同的...示例 2 在示例 2 中,您可以看到使用两个等号 (==) 返回 true,因为在 JavaScript 中true _ 为1,_false为0。因此在松散相等的比较之前将其转换为1。...但是在 (===) 严格相等中,它不会被转换并返回 false 示例 3 这是一个有趣的例子。在 (===) 严格相等中,我们可以看到它返回 false。...最好在代码中使用 (===) 严格相等,因为它会增加代码的清晰度并防止任何误报。

    96421

    Android触摸事件传递(上)

    前言:智能手机早已成为我们今天身边必不可少的手持设备,iOS和Android也是目前主流的二大移动操作系统,当然也有越来越多的开发者加入到移动开发的工作中来。...我也是一名普通的Android码农,目前也在学习iOS开发中,有一些成长道路上的一些经验和教训,很早就想动手记录下来,再三下决心,终鼓起勇气,敲起键盘,有了下文,初次行文,文笔未免羞涩,大神轻点喷~    ...在Android中,系统将触摸事件包装成MotionEvent对象,同时MotionEvent类内部定义了ACTION_DOWN, ACTION_UP, ACTION_MOVE,ACTION_CANCEL...上面我们讲到Activity会将触摸事件ev传递给根布局rootView,rootView有二种类型,View和ViewGroup。      ...也非常好理解,我们查看MotionEvent源代码,ACTION_DONW = 0, ACTION_UP=1, ACTION_MOVE=2, 打印的日志与我们手指的触摸操作完全一致,先是触发了ACTION_DOWN

    1.2K30

    android 触摸屏事件_android studio按钮点击事件

    之后,touch将会有后续事件,可能是: ACTION_MOVE //表示为移动手势 ACTION_UP //表示为离开屏幕 ACTION_CANCEL //表示取消手势,不会由用户产生,而是由程序产生的...一个Action_DOWN, n个ACTION_MOVE, 1个ACTION_UP,就构成了Android中众多的事件。...对于ViewGroup类的控件,有一个很重要的方法,就是onInterceptTouchEvent(),用于处理事件并改变事件的传递方向,它的返回值是一个布尔值,决定了Touch事件是否要向它包含的子View...双击的第二下Touch down和up都会触发,可用e.getAction()区分。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    2.1K30
    领券