学习
实践
活动
工具
TVP
写文章

dispatchTouchEvent事件分发浅析(六)MOVEUP

---- onTouchEvent ----> ACTION_UP ----> noMsg 我们可以发现,对应的 move和up事件, 都是和down的顺序一致的 ? ----> ACTION_UP ----> noMsg TouchEventChilds ---- onInterceptTouchEvent ----> ACTION_UP ----> noMsg MainActivity ---- onTouchEvent ----> ACTION_UP ----> noMsg ? ----> ACTION_UP ----> noMsg TouchEventChilds ---- onInterceptTouchEvent ----> ACTION_UP , 是在 ACTION_DOWN,ACTION_MOVE,ACTION_UP全部执行之后 才会判断执行的

33320

Android触屏事件流

一次触屏事件分为三个动作 ACTION_DOWN, ACTION_MOVE 和 ACTION_UP。 其中ACTION_DOWN和ACTION_UP在一次触屏事件中只会触发一次,ACTION_MOVE可能触发任意次(包括0次)。 假如dispatchTouchEvent返回false,那么在响应了ACTION_DOWN之后,后续的ACTION_MOVE和ACTION_UP均忽略,因此ACTION_MOVE和ACTION_UP永远不会有得到处理的机会 假如dispatchTouchEvent,那么后续的ACTION_MOVE和ACTION_UP均被接受,可以被其他方法响应。 ——>onTouchEvent 2 ACTION_UP:ACTION_DOWN——>onTouchEvent 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

4810
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android触摸事件传递机制

    ACTION_UP:用户手指离开屏幕,表示一次触摸事件的 注 :如果用户仅仅的是点击而已,则只会执行到 ACTION_DOWN 和 ACTION_UP 两个事件,不会执行到 ACTION_MOVE 事件 所以 ACTION_DOWN 和 ACTION_UP 是事件是必须的。 03-28 08:05:15.034 1219-1219/com.mvp.chenzhesheng.androidadvance I/MyTextView: onTouchEvent ACTION_UP 由于拥有不同的返回值,所以事件传递流程也有不同,经过不断修改返回值测试,最终得到了点击事件的流程图,ACTION_DOWN 和 ACTION_UP 事件的传递流程是相同的。 04-02 08:47:58.210 1030-1030/com.mvp.chenzhesheng.androidadvance I/MyTextView: onTouchEvent ACTION_UP

    45610

    View的事件分发及滑动冲突的解决

    一、触摸事件的类型 ACTION_DOWN:用户手指按下操作,一个按下操作标志着一次触摸事件的开始 ACTION_UP:用户手指抬起操作,一次抬起标志着一次事件的结束 ACTION_MOVE:手指按下抬起前 ,如果移动的距离超过一定的阈值,就会触发ACTION_MOVE 一次触摸事件,ACTION_DOWN和ACTION_UP是必须存在的,ACTION_MOVE视情况而定。 2021-03-30 18:07:14.960 23744-23744/com.ysl.dispatchstudy E/MyTextView: dispatchTouchEvent ACTION_UP 2021-03-30 18:07:14.960 23744-23744/com.ysl.dispatchstudy E/mTextView: OnTouch ACTION_UP 2021-03-30 事件都将默认交给父View去处理 c、原则上ACTION_UP也需要返回false,如果返回true,并且滑动事件交给子View处理,那么子View将接收不到ACTION_UP事件,子View的onClick

    29740

    图解 Android 事件分发机制

    目前所有的图的事件是针对ACTION_DOWN的,对于ACTION_MOVE和ACTION_UP我们最后做分析。 下面通过几张图看看不同场景下,ACTION_MOVE事件和ACTION_UP事件的具体走向并总结一下规律。 在这种场景下ACTION_MOVE和ACTION_UP 将如何呢,看下面的打出来的日志 ? 红色的箭头代表ACTION_DOWN 事件的流向 蓝色的箭头代表ACTION_MOVE 和 ACTION_UP 事件的流向 ? 对于ACTION_MOVE、ACTION_UP总结:ACTION_DOWN事件在哪个控件消费了(return true), 那么ACTION_MOVE和ACTION_UP就会从上往下(通过dispatchTouchEvent

    75790

    Android 中屏幕点击事件的实现Android onTouchEvent, onClick及onLongClick的调用机制

    onTouchEvent onTouchEvent中要处理的最经常使用的3个事件就是:ACTION_DOWN、ACTION_MOVE、ACTION_UP。 尽管大家天天都在用它们,可是有一点请留意,ACTION_DOWN事件作为起始事件,它的重要性是要超过ACTION_MOVE和ACTION_UP的,假设发生了ACTION_MOVE或者ACTION_UP, 及onTouchEvent的话,onTouchEvent是最先捕捉到ACTION_DOWN和ACTION_UP事件的,其次才可能触发onClick或者onLongClick。 能够看到,在保持按下的状态一定时间后会触发onLongClick,之后抬起手才会发生ACTION_UP。 onLongClick的发生是由单独的线程完毕的,而且在ACTION_UP之前,而onClick的发生是在ACTION_UP后,因此同一次用户touch操作就有可能既发生onLongClick又发生onClick

    15730

    Android 测试工具——Monkey事件与日志

    该事件由一组Touch(ACTION_DOWN)和Touch(ACTION_UP)事件组成,在手机上看到实际操作类似于点击。 该事件是由一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件组成的,在手机上看到的实际操作是一个没有拐弯的直线滑动操作。 从Monkey执行该事件对外输出的日志可以看到: 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上、下、左、右四个方向按键。 从Monkey执行该事件对外输出的日志可以看到:[代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是中间键和菜单键。 从Monkey执行该事件对外输出的日志可以看到:[代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上面说到的几个系统按键。

    21510

    笔记(四)——事件分发机制

    image 一个事件是指:一个ACTION_DOWN事件或ACTION_MOVE事件或ACTION_UP事件等。它们合称同一个事件序列。 如果ACTION_DOWN都没有接收到,同一事件序列的ACTION_MOVE、ACTION_UP就不会再被接收了。 但是要是ACTION_DOWN都没有接收到事件,后面的ACTION_MOVE、ACTION_UP事件序列就也不能接收到。 ACTION_UP事件,这里必须要返回false,假设事件交由子元素处理,如果父容器在ACTION_UP时返回了true,就会导致子元素无法接收到ACTION_UP事件,这个时候子元素中的onClick 方法在ACTION_UP时返回了false。

    47130

    Android事件分发原理分析

    image.png MotionEvent.ACTION_UP的传递 上面提到,一个单点完整的触摸动作是从ACTION_DOWN开始,并以ACTION_UP或者ACTION_CANCEL结束的,ACTION_UP 是在ACTION_DOWN已经发生的情况下再去基于当前View的一些特性,例如是否可点击,事件是否被消费来决定ACTION_UP是否能不能到达一些控件的,ACTION_UP依然也是从Activity的dispatchTouchEvent 方法开始往下逐层传递,这边可通过对比Button和TextView对于ACTION_UP的不同处理作比较: Button与TextView对于ACTION_UP的区别,Buton是可点击的isClickable = null,所以会通过mFirstTouchTarget.child来把ACTION_UP继续分发给子View,前提当然是当前这个ViewGroup满足事件分发条件,例如事件未被拦截,这样ACTION_UP 一样,无法收到ACTION_UP事件,下面来搞一个Demo,Demo地址:https://github.com/liuhongda/TouchEventDemo,Activity布局文件: <?

    43430

    OnGestureListener探索

    "onLongPress"); } // 在touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发 // 类似于ACTION_UP 注意,没有onSingleTapUp,可见只是类似于ACTION_UP,而不等同于ACTION_UPACTION_UP只要抬起就会检测到,onSingleTapUp必须是没有滑动没有长按 快速点击和慢速点击 ? 慢速点击中间多了一个onShowPress 滑动 ?

    33130

    android viewgroup事件分发机制

    ACTION_MOVE");   break;   case MotionEvent.ACTION_UP:               Log.e(TAG, "dispatchTouchEvent ACTION_UP    09-06 09:57:27.457: E/MyLinearLayout(959): onInterceptTouchEvent ACTION_UP   09-06 09:57:27.457: E /MyButton(959): dispatchTouchEvent ACTION_UP   09-06 09:57:27.457: E/MyButton(959): onTouchEvent ACTION_UP // XXX: We should probably send an ACTION_UP to the current // target.                 了 3、ViewGroup - dispatchTouchEvent - ACTION_UP public boolean dispatchTouchEvent(MotionEvent ev) {

    42460

    Appium+python自动化(十八)- 你难道是猴哥失散多年的混血弟弟还是妹妹???- Monkey事件(超详解)

    该事件由一组Touch(ACTION_DOWN)和Touch(ACTION_UP)事件组成,在手机上看到实际操作类似于点击。 该事件是由一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件组成的,在手机上看到的实际操作是一个没有拐弯的直线滑动操作。 从Monkey执行该事件对外输出的日志可以看到: 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上、下、左、右四个方向按键。 从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是中间键和菜单键。 从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上面说到的几个系统按键。

    36630

    Monkey随机性能压测初探(一)

    :Sending Trackball (ACTION_UP): 0:(0.0,0.0) :Sending Touch (ACTION_DOWN): 0:(462.0,51.0) :Sending Touch ): 0:(451.0,1139.0) :Sending Touch (ACTION_UP): 0:(445.72433,1140.6277) :Sending Touch (ACTION_DOWN ): 0:(717.0,464.0) :Sending Touch (ACTION_UP): 0:(720.0,483.52737) :Sending Trackball (ACTION_MOVE) : 0:(-4.0,3.0) :Sending Trackball (ACTION_UP): 0:(0.0,0.0) :Sending Touch (ACTION_DOWN): 0:(684.0,69.0 ) :Sending Touch (ACTION_UP): 0:(691.5189,169.68057) :Sending Touch (ACTION_DOWN): 0:(376.0,1005.0)

    92910

    解析Android点击事件分发机制

    ACTION_MOVE");//移动 break; case MotionEvent.ACTION_UP: Log.d(TAG, "Activity onTouchEvent ACTION_UP ); break; case MotionEvent.ACTION_UP: Log.d(TAG, "Activity dispatchTouchEvent ACTION_UP ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.d(TAG, "onInterceptTouchEvent ACTION_UP ACTION_MOVE D/MainActivity: Activity onTouchEvent ACTION_MOVE D/MainActivity: Activity dispatchTouchEvent ACTION_UP D/MainActivity: Activity onTouchEvent ACTION_UP 这是默认的情况,把它分为三个阶段: 1.

    50610

    笔记——事件分发机制(四)

    4.dispatchTouchEvent()与onInterceptTouchEvent()依据上图情况可以得到相似结果,只要是ACTION_DOWN都没有接收到事件后面的ACTION_MOVE、ACTION_UP 但是要是ACTION_DOWN都没有接收到事件,后面的ACTION_MOVE、ACTION_UP事件序列就也不能接收到。 ? ViewGroup A.png ? ACTION_UP事件,这里必须要返回false,假设事件交由子元素处理,如果父容器在ACTION_UP时返回了true,就会导致子元素无法接收到ACTION_UP事件,这个时候子元素中的onClick 事件就无法触发,但是父容器比较特殊,一旦它开始拦截任何一个事件,那么后续的事件都会交给它来处理,而ACTION_UP作为最后一个事件也必定可以传递给父容器,即便父容器的onInterceptTouchEvent 方法在ACTION_UP时返回了false。

    36340

    Android编程实现两点触控功能示例

    pointerCount=" + pointerCount); break; case MotionEvent.ACTION_UP: System.out.println("ACTION_UP pointerCount=" + pointerCount); break; case MotionEvent.ACTION_UP: System.out.println("ACTION_UP 2)使用event.getAction()来获取当前的事件码,单点按下、松开和移动的事件分别是:MotionEvent.ACTION_DOWN、ACTION_UP、ACTION_MOVE;第二个点按下、

    38610

    android view事件分发机制

    onTouchEvent ACTION_MOVE");   break;   case MotionEvent.ACTION_UP:               Log.e(TAG, "onTouchEvent ACTION_UP ACTION_MOVE");   break;   case MotionEvent.ACTION_UP:               Log.e(TAG, "dispatchTouchEvent ACTION_UP E/MyButton(879): onTouchEvent ACTION_MOVE   08-31 06:09:39.232: E/MyButton(879): dispatchTouchEvent ACTION_UP    08-31 06:09:39.248: E/MyButton(879): onTouch ACTION_UP   08-31 06:09:39.248: E/MyButton(879): onTouchEvent ACTION_UP的最后一行:removeTapCallback(),如果mPendingCheckForTap不为null,移除; 4、总结 好了,代码跨度还是相当大的,下面需要总结下: 1、整个View

    40960

    Android触摸事件传递(下)

    但是我们仔细想来,好像还有点问题,就是我们一个按钮点击的动作,至少应该包含了ACTION_DOWN,ACTION_UP,二个触摸事件,但是我们打印的日志,显然只是一个触摸事件,那这是为什么呢?     我们也很好读懂,如果事件是ACTION_UP或者ACTION_CANCEL,表示触摸结束,但是还有第三种是 如果触摸事件是ACTION_DOWN 并且result==false,同样停止嵌套的触摸事件传递 ,即后面的ACTION_MOVE,ACTION_UP都不会触发,因为在我们上面的例子中,没有消费触摸事件,返回的都是false,所以只触发了ACTION_DOWN事件。 我们看到,这里一次按钮点击触发了4个事件,分别是ACTION_DOWN,ACTION_MOVE,ACTION_MOVE,ACTION_UP,同时所有事件全部被btn3消费掉了,这就验证了我们上面的结论,

    49810

    android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」

    最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到ACTION_MOVE和ACTION_UP,我决定下决心写个测试的小程序,来研究一个触摸事件从上往下是怎么传递和处理的 ACTION_DOWN事件的判断和处理,直接影响到了后续的ACTION_MOVE和ACTION_UP,在上面的图中,FrameLayout的onTouchEvent返回了true,那么当ACTION_MOVE 如果说一个ACTION_DOWN从头到尾都是返回false,那么后续的ACTION_MOVE和ACTION_UP就没法被感知到了。 ACTION_POINTER_DOWN,第三个或者更多手指按下的时候,也是ACTION_POINTER_DOWN,如果此时有一个手指离开屏幕,会产生ACTION_POINTER_UP,当最后一个手指离开屏幕的时候,才会产生ACTION_UP

    8320

    扫码关注腾讯云开发者

    领取腾讯云代金券