展开

关键词

dispatchTouchEvent事件分发浅析(六)MOVEUP

onInterceptTouchEvent ----> ACTION_UP ----> noMsgTouchEventChilds ---- dispatchTouchEvent ----> ACTION_UP ---- dispatchTouchEvent ----> ACTION_UP ----> noMsgTouchEventChilds2 ---- onTouchEvent ----> ACTION_UP onTouch ----> ACTION_UP ----> noMsgEventViewGroup ---- onTouchEvent ----> ACTION_UP ----> noMsgMainActivity onInterceptTouchEvent ----> ACTION_UP ----> noMsgTouchEventChilds ---- dispatchTouchEvent ----> ACTION_UP ----> ACTION_UP ----> noMsgTouchEventChilds2 ---- onTouchEvent ----> ACTION_UP ----> noMsgMainActivity

22620

Android触摸事件传递机制

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

21510
  • 广告
    关闭

    云加社区有奖调研

    参与社区用户调研,赢腾讯定制礼

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

    图解 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

    62490

    Android事件分发原理分析

    我的理解是ACTION_DOWN应该作为触摸动作最先发生的事件,一个触摸动作首先发生了ACTION_DOWN事件,然后如果又移动就会发生ACTION_MOVEDMOVE事件,接着再抬手发生了ACTION_UP image.pngMotionEvent.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

    31230

    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)组成的,点击的就是上面说到的几个系统按键。

    4110

    细说Android事件传递

    Line 41: 01-08 14:59:45.939 Iyan     ( 4613): MainActivity-dispatchTouchEvent-ACTION_UP... Line 43: 01-08 14:59:45.941 Iyan     ( 4613): TestButton-dispatchTouchEvent-ACTION_UP... Line 45: 01-08 14:59:45.944 Iyan     ( 4613): testBtn-onTouch-ACTION_UP... Line 47: 01-08 14:59:45.946 Iyan     ( 4613): TestButton-onTouchEvent-ACTION_UP... Line 83: 01-08 15:05:51.691 Iyan     ( 5262): TestButton-dispatchTouchEvent-ACTION_UP...

    317100

    OnGestureListener探索

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

    26330

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

    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。

    27430

    android viewgroup事件分发机制

    onTouchEvent ACTION_MOVE);   break;   case MotionEvent.ACTION_UP:              Log.e(TAG, onTouchEvent ACTION_UP  ACTION_MOVE);   break;   case MotionEvent.ACTION_UP:              Log.e(TAG, onInterceptTouchEvent ACTION_UP   09-06 09:57:27.457: EMyLinearLayout(959): onInterceptTouchEvent ACTION_UP  09-06 09:57:27.457: EMyButton (959): dispatchTouchEvent ACTION_UP  09-06 09:57:27.457: EMyButton(959): onTouchEvent ACTION_UP   可以看到大体的事件流程为 XXX: We should probably send an ACTION_UP to the current  target.

    34360

    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)组成的,点击的就是上面说到的几个系统按键。

    28530

    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) :Sending

    57710

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

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

    24640

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

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

    19710

    android view事件分发机制

    onTouchEvent ACTION_MOVE);   break;   case MotionEvent.ACTION_UP:              Log.e(TAG, onTouchEvent ACTION_UP onTouch ACTION_MOVE);   break;   case MotionEvent.ACTION_UP:                      Log.e(TAG, onTouch ACTION_UP   08-31 06:09:39.248: EMyButton(879): onTouch ACTION_UP  08-31 06:09:39.248: EMyButton(879): onTouchEvent  ACTION_UP   我有意点击的时候蹭了一下,不然不会触发MOVE,手抖可能会打印一堆MOVE的日志~~~ 好了,可以看到,不管是DOWN,MOVE,UP都会按照下面的顺序执行:1、dispatchTouchEvent2 ACTION_UP的最后一行:removeTapCallback(),如果mPendingCheckForTap不为null,移除;4、总结好了,代码跨度还是相当大的,下面需要总结下:1、整个View的事件转发流程是

    30660

    TextView AutoLink, ClikSpan 与长按事件冲突的解决

    } ---- }这里我们重点关注代码 20 - 31 行,可以看到,他会先取出所有的 ClickableSpan,而我们的 URLSpan 正是 ClickableSpan 的子类,接着判断是否是 ACTION_UP 因此,ClickableSpan 的 onClick 方法是在 ACTION_UP 事件中调用的,跟我们的长按事件没半毛钱关系。 重要的事情说三遍ClickableSpan 的 onClick 方法是在 ACTION_UP 事件中调用的ClickableSpan 的 onClick 方法是在 ACTION_UP 事件中调用的ClickableSpan 的 onClick 方法是在 ACTION_UP 事件中调用的知道了 ClickableSpan 的 onClick 方法是在 ACTION_UP 事件中调用的,下面让我们一起来看一下怎样解决 TextView ----解决思路其实很简单,既然,它是在 ACTION_UP 事件处理的,那么我们只需要监听到长按事件,并且当前 MotionEvent 是 ACTION_UP 的时候,我们直接返回 true,不让他继续往下处理就

    52620

    Monkey测试3——Monkey测试结果分析

    com.tencent.smtt.SplashActivity } in package com.tencent.smtt 在下面的log中,Sending Pointer ACTION_DOWN和Sending Pointer ACTION_UP :Sending Pointer ACTION_DOWN x=47.0 y=438.0 :Sending Pointer ACTION_UP x=47.0 y=438.0 Sleeping for 500 milliseconds :SendKey (ACTION_DOWN): 20 KEYCODE_DPAD_DOWN :SendKey (ACTION_UP): 20 KEYCODE_DPAD_DOWN

    80010

    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消费掉了,这就验证了我们上面的结论,

    31310

    Android TouchEvent事件传递机制

    . * return mIsBeingDragged; }MotionEvent一共有多种值,但是最后的落脚点一定是ACTION_UP,(看标注了AAAAAA的那一行),里面mIsBeingDragged = false;最后return mIsBeingDragged表示默认值是false2.演示的图片里面为什么有两份调用 因为我点击了一次,依次点击包含两种ACTION:ACTION_DOWN和ACTION_UP 当然,“记忆”功能的信息只在一系列事件完成之前有效,如从ACTION_DOWN事件开始,直到后续事件ACTION_MOVE,ACTION_UP结束后,“记忆”的信息就会清除。 也就是说如果某View处理ACTION_DOWN事件失败了(onTouchEvent()返回false),那么后续的ACTION_MOVE,ACTION_UP等事件就不会再传递到该View了,由其父View

    18920

    解析Android点击事件分发机制

    Activity onTouchEvent ACTION_MOVE);移动 break; case MotionEvent.ACTION_UP: Log.d(TAG, Activity onTouchEvent ACTION_UP dispatchTouchEvent ACTION_MOVE); break; case MotionEvent.ACTION_UP: Log.d(TAG, Activity dispatchTouchEvent ACTION_UP onInterceptTouchEvent ACTION_MOVE); break; case MotionEvent.ACTION_UP: Log.d(TAG, onInterceptTouchEvent ACTION_UP ACTION_MOVEDMainActivity: Activity dispatchTouchEvent ACTION_UPDMainActivity: Activity onTouchEvent ACTION_UP

    21810

    Android KeyEvent 点击事件分发处理流程(一)

    流程解析ps:当我们在某个 Activity 界面中点击了某个遥控器按键时,会有 Action_Down 和 Action_Up 两个 KeyEvent 进行分发处理,分发流程都一样,区别就是最后交给 遗留问题每次按键点击都会有 Action_Down 和 Action_Up 两次事件,目前遇到这样的场景,从 Activity A 打开 Activity B,Action_Down 和 Action_Up 会在 Activity A 中分发处理,然后 Action_Up 又会在 Activity B 中分发处理。 最开始的想法 Activity A 将 Action_Up 事件传递给 Activity B 进行处理,但是在 Activity A 中将 Action_Up 先消费掉即返回 true,发现 Activity B 中仍然会重新分发处理 Action_Up 事件。

    1.5K60

    相关产品

    • 云服务器

      云服务器

      腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券