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

Android 中 View 的手势事件处理

类中提供的两个常用的接口中的方法: GestureDetector.GestureListener: // 当控件被触摸到的一瞬间就会调用的方法,对应触摸事件动作:MotionEvent.ACTION_DOWN...: /* * 严格的单击行为,如果一次单击之后到系统认为双击的时间段内没发生另一次单击行为时调用, * 也就是说这个方法被调用了之后不可能再调用双击行为方法...单击一个位置之后,onDown 方法和 onSingleTapUp 方法被调用,并且模拟器中显示出了单击位置的坐标,接下来试试滑动: ?...最后还有一个问题:当一个 View 中既有 onTouchEvent 方法并且设置了 OnTouchListener 接口时,情况是怎样的呢?...,那么我们就可以推出,OnTouchListener 接口的 onTouch 方法的优先级是高于 View 里面自带的 onTouchEvent 方法的,当 View 设置了 OnTouchListener

1.5K20

Android触摸事件_wpf触摸屏点击事件

触屏事件 三类简单触屏事件: 单击事件:OnClickListener 长按事件:OnLongClickListener 触摸事件:OnTouchListener 这些方法都是View类的,所以像TextView...View view)即可 长按事件 长按事件有单击事件的前四种方法,但是没有最后一种方法。...当返回true,表示消耗掉了这次事件,也就是说不会有单击的效果。如果返回法false,则在松手的时候会触发单击事件。...触摸事件 触摸事件有onTouch方法有参数MotionEvent event,通过对象event方法getX()和getY()可以获取触摸出横纵坐标。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

    android view事件分发机制_android事件分发流程图

    的监听事件,具体运行结果如下: 当稳稳的点击Button时打印如下: 当稳稳的点击除过Button以外的其他地方时打印如下: 当收指点击Button时按在Button上晃动了一下松开后的打印如下...如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。...当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发下一个action。...(View)的onTouchEvent直接返回true而不调运super方法时,事件派发机制如同4.2.1类似,只是最后up事件没有触发onClick而已(因为没有调用super)。...当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发下一个action(也就是说dispatchTouchEvent返回true才会进行下一次action

    63520

    Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)「建议收藏」

    )),这个被if的大括弧括起来的一段代码很重要,具体解释如下: 调用方法dispatchTransformedTouchEvent()将Touch事件传递给特定的子View。...那我们分情况继续分析一下: 当161行if判断的mFirstTouchTarget为null时,也就是说Touch事件未被消费,即没有找到能够消费touch事件的子组件或Touch事件被拦截了,则调用ViewGroup...的dispatchTransformedTouchEvent()方法处理Touch事件(和普通View一样),即子View没有消费Touch事件,那么子View的上层ViewGroup才会调用其onTouchEvent...当161行if判断的mFirstTouchTarget不为null时,也就是说找到了可以消费Touch事件的子View且后续Touch事件可以传递到该子View。...View的这个方法,因为ViewGroup的父类是View);当child !

    36820

    Android事件分发机制源码解析

    根据文档注释,当有任意一个按键、触屏或者轨迹球事件发生时,栈顶Activity的onUserInteraction会被触发。...我们回到Activity的dispatchTouchEvent方法,注意当getWindow().superDispatchTouchEvent(ev)这一语句返回false时,即事件没有被任何子View...); } } 所以我们在处理某些滑动冲突场景时,可以从子View中调用父View的requestDisallowInterceptTouchEvent方法,阻止父View拦截事件。...return false; } 代码量不多,主要做了三件事: 若View设置了OnTouchListener,且处于enable状态时,会先调用mOnTouchListener的onTouch...方法 若onTouch返回false,事件传递给onTouchEvent方法继续处理 若最后onTouchEvent也没有消费这个事件,将返回false,告知上层parent将事件给其他兄弟View 这样

    77330

    Carson带你学Android:手把手教你学会手势识别应用 GestureDetector

    用户轻触触摸屏,尚未松开或拖动 // 与onDown()的区别:无松开 / 拖动 // 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress...检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener...检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener...用户轻触触摸屏,尚未松开或拖动 // 与onDown()的区别:无松开 / 拖动 // 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress...检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener

    1.6K11

    Android 手势识别应用:手把手教你学会 GestureDetector(含实例讲解)

    用户轻触触摸屏,尚未松开或拖动 // 与onDown()的区别:无松开 / 拖动 // 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress...检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener...检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener...用户轻触触摸屏,尚未松开或拖动 // 与onDown()的区别:无松开 / 拖动 // 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress...检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener

    10.8K41

    Carson带你学Android:手把手带你深入分析事件分发机制!

    () * 调用场景:当一个点击事件未被Activity下任何一个View接收/处理时,就会调用该方法 */ public boolean onTouchEvent(MotionEvent event...()返回了false,所以事件无被消费,会继续往下传递,即调用View.onTouchEvent(); 调用View.onTouchEvent()时,对于抬起View事件,在调用performClick...因为onTouch()返回了true,所以事件被消费,不会继续往下传递,View.dispatchTouchEvent()直接返回true; 所以最终不会调用View.onTouchEvent(),也不会调用...这里需要特别注意的是:Activity、View都无该方法,仅ViewGroup特有。...等) 当dispatchTouchEvent()事件分发时,只有前一个事件(如ACTION_DOWN)返回true,才会收到后一个事件(ACTION_MOVE和ACTION_UP) 即如果在执行ACTION_DOWN

    81510

    Android高级进阶之路【二】十分钟彻底弄明白 View 事件分发机制

    () * 调用场景:当一个点击事件未被Activity下任何一个View接收/处理时,就会调用该方法 */ public boolean onTouchEvent(MotionEvent event...点击空白区域时,ViewGroup. dispatchTouchEvent()里遍历所有子View希望找到被点击子View时找不到,所以ViewGroup自身会处理该事件,于是执行onTouchEvent...()返回了false,所以事件无被消费,会继续往下传递,即调用View.onTouchEvent(); 调用View.onTouchEvent()时,对于抬起View事件,在调用performClick...[image.png] 这里需要特别注意的是:Activity、View都无该方法,仅ViewGroup特有。...等) 当dispatchTouchEvent()事件分发时,只有前一个事件(如ACTION_DOWN)返回true,才会收到后一个事件(ACTION_MOVE和ACTION_UP) 即如果在执行ACTION_DOWN

    66130

    限时分享Android面试中事件分发的高级技巧

    事件处理:当事件到达目标View时,该View会调用自身的事件处理方法(例如onTouchEvent)来处理事件,如果事件被处理,则事件分发结束;如果事件未被处理,则事件会向上返回,由父View继续处理...当一个View设置了OnTouchListener,它的onTouch方法会在触摸事件发生时首先被调用。...当没有设置 OnTouchListener,或者OnTouchListener的onTouch方法返回false时,系统会调用View的onTouchEvent方法来处理触摸事件。...当用户点击一个可点击的View,并且onTouch()没有被拦截,系统会调用该View的onClick方法来处理点击事件。...与触摸事件不同,点击事件不会影响触摸事件的传递顺序,因此onClick方法在触摸事件发生后被调用。 所以,事件传递的优先级是onTouch > onTouchEvent > onClick。

    17010

    View事件分发

    如果某个view返回false,那么调用的传递在它这里终止,后续事件也不会再传递给它。 实际上也只在传递down事件时,ViewGroup才会采取一定规则来决定是否传递事件给child。...当一个View处理多个触摸点的事件序列时,触摸点产生不同事件过程是: 用户第一个手指按下,产生ACTION_DOWN事件。 其它手指按下,触发ACTION_POINTER_DOWN。...收到ACTION_CANCEL,例如View被移除、弹框、界面切换等引起的View突然不可见。此时收到cancel事件,终止一次手势。...TouchTarget 当一个触摸点的down事件被某个child处理时,ViewGroup使用一个TouchTarget对象来保存child和pointer的对应关系。...一个触摸点的序列遵循down-move-up这样的序列,但如果在down或者move之后,突然发生界面切换或者类似view被移除,不可见等情况,那么此时触摸点不会收的“正常”情况下的up事件,取而代之的是来自

    1.3K60

    View 事件分发

    方法在onTouchEvent方法之调用performClick获取,而onTouchListener方法优先于onTouchevent方法,所以onTouch优先于onClick方法执行 当onTouch...方法返回值 当控件是enabled,也就是说setEnabled(true)并且onTouch方法返回true,那么dispatchEvent就返回true,而onTouchEvent方法就不会执行 View...= null) { //这里调用了TouchDelegate类中的onTouchEvent方法,该方法是dispatchEvent返回为true时,才返回true,此时 onTouchEvent就返回true...()中调用了onClick方法,触发onClick监听 当dispatchEvent事件分发时,只有前一个action返回为true时,后一个action才会触发 View事件分发面试问题 事件分发中的...onTouch 和 onTouchEvent 有什么区别,该如何使用 这两个方法都是在 View 的 dispatchTouchEvent 中调用的,onTouch 优先于 onTouchEvent

    63910

    Android事件分发全面解析(基础篇)-夯实基础

    当用户触摸屏幕时( View 或 ViewGroup 派生的控件),将产生点击事件(Touch事件) Touch事件相关细节,比如触摸位置,时间,手势等等,会被封装成 MotionEvent 对象。...一个View 可以注册很多监听器吧,例如单击,长按,触摸事件(onTouch),并且View 本身也有 onTouchEvent 方法,那么问题来了,这么多事件相关的方法应该由谁管理,所以View也会有这个...用一张搬运过来的事件分发流程图来说明一下: 当一个View需要处理事件时,如果它设置了 OnTouchListener, 那么 OnTouchListener 中的 onTouch 方法会被回调。...这时事件如何处理还要看 onTouch 的返回值,如果返回false,则当前View 的onTouchEvent 方法会被调用;如果返回 true,那么 onTouchEvent 方法将不会被调用。...结论:当一个事件 被 onInterceptTouchEvent 返回true 中途拦截时,会传递 ACTION_CANCEL 给view的 onTouchEvent方法。

    64420

    Android中单个View的触摸事件分发机制

    方法如下 以TextView为例,给textview添加listener: setOnTouchListener:覆写父接口OnTouchListener的onTouch方法,当触摸view时会触发该listener...,为该activity中的控件的触摸事件进行分发,分发的意思也就是说,如果该方法返回true,当你对activity中的view进行点击,长按,滑动等操作时Log信息如下: 的是返回的false 在此声明:当屏幕进行触摸时首先是activity感受到该触摸事件,然后对事件进行分发处理,也就是说要不要传给activity中的view进行处理。...可以看出,当activity触摸时 首先进行dispatchTounchEvent进行事件的分发,分发到view后出发onTouchListener的onTouch方法,会有三个动作,如果是长按,则在ACTION_MOVE...了解到触摸事件处理逻辑后博文刚开始的问题就好解决多了 当点击view时,只是执行onClick,而不执行onLongClick 当长按view时 ,在手抬起之前执行onLongClick,在抬起之后会执行

    83320

    带你一起探究Android事件分发机制, 让面试提问不在畏惧!

    当用户触摸屏幕产生一系列事件时,事件会由高到低,由外向内依次传递,最终把事件交到一个具体的View手上处理,这个传递的过程就叫做事件分发。...子View可以调用parent.requestDisallowInterceptTouchEvent(true)方法可以让父View没机会执行处理拦截的逻辑,直接让父View开始传递事件。...dispatchTransformedTouchEvent()方法会根据child参数来做不同的处理,当子View为null时调用View的dispatchTouchEvent()传递事件,意味当前View...ACTION_POINTER_DOWN/ACTION_HOVER_MOVE这三种情况时才会遍历查找符合条件的子View,所以当TextView消费Down事件后,LinearLayout就认准他了,以后的事件都会交给他处理...当父View认准子View(mFirstTouchTarget!=null),以后的事件都会交给他处理,即使子View不可见和事件坐标超出子View范围。

    1.4K10

    Android事件分发原理分析

    的,如果是,就会触发这个View的OnTouchListener的onTouch,然后根据onTouch的返回值决定是否触发View的onTouchEvent,也就是说OnTouchListener会比...方法返回true,而TextView是不可点击的isClickable方法返回false,所以Button在处理ACTION_DOWN的时候,会在View的onTouchEvent返回true: if...里面的打印,而ACTION_UP确实有被MyButton以及MyRelativeLayout收到,日志证实了我们上面基于源码的分析是正确的 总结 事件触摸机制的几个重要的方法: ViewGroup中的dispatchTouchEvent...方法,负责把事件分发给子View,如果没有子View,就自己处理了 ViewGroup的onInterceptTouchEvent方法,是否拦截触摸事件,控制触摸事件的流向,true表示拦截事件,false...传进去的方法参数disallowIntercept为true表示不允许拦截,false表示允许拦截 View的dispatchTouchEvent负责把触摸事件进行处理,这里已经是触摸事件传递的终点了,

    1.2K30
    领券