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

Android:onTouch()永远不会被调用?

Android中的onTouch()方法是View类中的一个回调方法,用于处理触摸事件。它会在用户触摸屏幕时被调用,并且返回一个布尔值来指示是否消耗了该事件。

然而,如果在一个View上设置了点击事件监听器(例如setOnClickListener()),那么onTouch()方法将不会被调用。这是因为点击事件会被优先处理,而不会再触发onTouch()方法。

在某些情况下,我们可能需要同时使用点击事件和触摸事件,这时可以通过在onTouch()方法中返回false来确保点击事件仍然能够正常触发。返回false表示该事件未被消耗,会继续传递给下一层的View处理。

总结起来,如果一个View同时设置了点击事件监听器和触摸事件监听器,并且点击事件被触发了,那么onTouch()方法将不会被调用。如果需要同时处理点击事件和触摸事件,可以在onTouch()方法中返回false来确保点击事件正常触发。

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

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

相关·内容

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

返回false:拦截(默认) * b....若不拦截,则将该事件传递到下层 // 即 下层元素的dispatchTouchEvent()就会被调用,重复上述过程 // 直到点击事件被最终处理为止 consume...onTouchEvent() 注: 该事件列的其他事件(Move、Up)将不会再传递给ViewGroup B的onInterceptTouchEvent();因:该方法一旦返回一次true,就再也不会被调用...后续事件将直接传递给ViewGroup B 的onTouchEvent()处理,而不会再传递给ViewGroup B 的onInterceptTouchEvent(),因该方法一旦返回一次true,就再也不会被调用了...即非enable),那么给它注册onTouch事件将永远得不到执行,具体原因看如下代码 // &&为短路与,即如果前面条件为false,将不再往下执行 // 故:onTouch()能够得到执行需2

75310

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

返回false:拦截(默认) * b....若不拦截,则将该事件传递到下层 // 即 下层元素的dispatchTouchEvent()就会被调用,重复上述过程 // 直到点击事件被最终处理为止 consume...B的onTouchEvent() 注:该事件列的其他事件(Move、Up)将不会再传递给ViewGroup B的onInterceptTouchEvent();因:该方法一旦返回一次true,就再也不会被调用...后续事件将直接传递给ViewGroup B 的onTouchEvent()处理,而不会再传递给ViewGroup B 的onInterceptTouchEvent(),因该方法一旦返回一次true,就再也不会被调用了...() 注:若1个控件不可点击(即非enable),那么给它注册onTouch事件将永远得不到执行,具体原因看如下代码 // &&为短路与,即如果前面条件为false,将不再往下执行 // 故:onTouch

60230

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

onInterceptTouchEvent 在 dispatchTouchEvent内部调用,用来判断是否拦截某个事件,如果当前View拦截了某个事件,那么在同一个事件序列中,此方法不会被再次调用,返回结果表示是否拦截当前事件...用一张搬运过来的事件分发流程图来说明一下: 当一个View需要处理事件时,如果它设置了 OnTouchListener, 那么 OnTouchListener 中的 onTouch 方法会被回调。...这时事件如何处理还要看 onTouch 的返回值,如果返回false,则当前View 的onTouchEvent 方法会被调用;如果返回 true,那么 onTouchEvent 方法将不会被调用。...在 onTouchEvent 方法中,如果当前设置有 onClickListener,那么它的 onClick 方法会被调用。...ViewGroup 默认拦截任何事件。Android 源码中ViewGroup 的 onInterceptTouchEvent 方法默认返回false.

49620

细说Android事件传递

intercepted)  ),它会先调用 intercepted = onInterceptTouchEvent(ev);然后通过if判断。...也就是说这个谋士默认的意见是,永远拦截!!!!只要有孩子,就交给孩子们处理吧。下面给出实例说明,新建TestLinearLayout继承自Linearlayout。...果然事件就此打住,孩子们压根不知道,父亲执行了onClick和onTouch监听。可见父亲还是伟大的啊,只要谋士拦截事件,那么事件就给孩子。...这时候的父亲就像一个独立的孩子一样了(View),无官一身轻,再也不用管它的孩子了,可以正常onClick onTouch. 2、如果希望一个View只onTouchonClick,在onTouch...如果少了,表示连dispatch*** onTouchEvent压根就不调用了,事件就此打住。 貌似真相水落石出了,但究竟清楚了没有请看下篇根据自定义复合控件的监听问题再探讨下。

1.3K100

Android触摸事件_简述兴奋在突触的传递过程

接着就是li.mOnTouchListener.onTouch(this, event)条件,这里调用onTouch方法,该方法的调用就是在MainActivity.java中为CustomButton...看结果如何: 发现不是之前想象的那样,还是调用了CustomRelativeLayout的onTouch()方法,这就说明onInterceptTouchEvent()方法没有拦截容器控件的触屏事件...onTouch事件要先于onClick事件执行,onTouch在事件分发方法dispatchTouchEvent中调用,而onClick在事件处理方法onTouchEvent中被调用,onTouchEvent...super.dispatchTouchEvent(ev) 并且 onInterceptTouchEvent 返回 true 或返回 super.onInterceptTouchEvent(ev) 的情况下 onTouchEvent 会被调用...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

63520

Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

,就零零散散在好多地方使用到了Android事件分发的知识。...从源码中可以看出,这两个方法都是在View的dispatchTouchEvent中调用的,onTouch优先于onTouchEvent执行。...因此如果你有一个控件是非enable的,那么给它注册onTouch事件将永远得不到执行。...第二,在布局文件里面给ImageView增加一个android:clickable=”true”的属性,这样ImageView变成可点击的之后,即使在onTouch里返回了false,ACTION_DOWN...今天的讲解就到这里了,相信大家现在对Android事件分发机制又有了进一步的认识,在后面的文章中我会再带大家一起探究Android中ViewGroup的事件分发机制,感兴趣的朋友请继续阅读 Android

41810

Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

其实我一直准备写一篇关于Android事件分发机制的文章,从我的第一篇博客开始,就零零散散在好多地方使用到了Android事件分发的知识。...从源码中可以看出,这两个方法都是在View的dispatchTouchEvent中调用的,onTouch优先于onTouchEvent执行。...因此如果你有一个控件是非enable的,那么给它注册onTouch事件将永远得不到执行。...第二,在布局文件里面给ImageView增加一个android:clickable="true"的属性,这样ImageView变成可点击的之后,即使在onTouch里返回了false,ACTION_DOWN...今天的讲解就到这里了,相信大家现在对Android事件分发机制又有了进一步的认识,在后面的文章中我会再带大家一起探究Android中ViewGroup的事件分发机制,感兴趣的朋友请继续阅读 Android

1.2K60

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

boolean onTouchEvent(MotionEvent event) true 表示当前视图处理对应的事件,事件将不会向上传递给父视图 false 表示当前视图处理对应的事件,事件将会向上传递给父视图的...onTouchEvent进行处理 在Android中拥有事件传递的类有三种 activity view 和viewGroup activity:拥有dispatchTouchEvent和onTouchEvent...方法 view:拥有dispatchTouchEvent和onTouchEvent方法 viewGroup:永远dispatchTouchEvent、onInterceptEvent和onTouchEvent...true消费掉,如果不能处理就返回false,这时事件会重新向外层传递,并由外层的onTouchEvent进行处理,依次类推 2、如果事件在向内层传递过程中被人为干预,事件处理函数返回true,事件将会被提前消费掉...,内层view将不会收到这个事件 3、view的事件触发是先执行onTouch方法,在最后执行onClick方法,如果onTouch返回true,事件将不会继续传递,最后也不会调用onClick方法,

76140

Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )

Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) ---- 文章目录 Android...dispatchTouchEvent(MotionEvent event) { // 如果上面为 true ( 触摸监听器的触摸事件处理返回 true ) , 就会阻断该分支的命中 , 该分支执行了...dispatchTouchEvent(MotionEvent event) { // 如果上面为 true ( 触摸监听器的触摸事件处理返回 true ) , 就会阻断该分支的命中 , 该分支执行了

2K10

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

1 背景 最近在简书和微博还有Q群看见很多人说Android自定义控件(View/ViewGroup)如何学习?为啥那么难?其实答案很简单:“基础牢,地动山摇。” 扯蛋了,进入正题。...,如果onTouch返回true则onClick不会被调运了。...如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。...如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

60520

Android查缺补漏(View篇)--事件分发机制

如果此方法返回false表示拦截事件,事件将传递给下级View的dispatchTouchEvent()。...上文说了这么多还是不够具体,先用流程图大体说明一个以上三个方法的关系,及调用流程,下文还会结合具体示例详细说明在事件分发传递中各个方法的调用规则。 三者关系大体如下图: ?...无论根View的下级View是不是ViewGroup,如果拦截事件,最终事件会传递到一个纯View的控件上。...如果在onTouch()消耗了事件(返回true),那么事件将不在传递给onTouchEvent()方法,最终也不会调用onClick()方法。...为View绑定的OnClickListener中的onClick()方法优先级最低,是在整个事件流结束后才会被调用,也就是需要经过手指的按下--抬起这个过程才会触发onClick()方法。

61870

Android事件分发机制

getParent.onTouchEvent(event); } } 复制代码如果view的onTouchEvent方法返回false,那么它的父容器的onTouchEvent又会被调用...一直到最上层,也就是Activity的onTouchEvent被调用。 至此,消费流程完毕 但是,关于onTouch,onTouchEvent和onClick又是怎么样的调用关系呢?...如果它的onTouchListener被设置了的话,则onTouch会被调用,如果onTouch的返回值返回true,则onTouchEvent不会被调用。...如果返回false或者没有设置onTouchListener,则会继续调用onTouchEvent。而onClick方法则是设置了onClickListener则会被正常调用。...欢迎关注我,分享Android干货,交流Android技术。 对文章有何见解,或者有何技术问题,欢迎在评论区一起留言讨论!

85920

android事件分发机制的实现原理

android中的事件处理,以及解决滑动冲突问题都离不开事件分发机制,android中的事件流,即MotionEvent都会经历一个从分发,拦截到处理的一个过程。...onInterceptEvent()与onTouchEvent(),如果onInterceptEvent()返回true,那么会调用到当前view的onTouchEvent()方法,如果拦截,事件就会下发到子...这个时候会调用onTouch()事件,当onTouch()返回true时,这个时候result会赋值true。而当result为true时,onTouchEvent()将不会被调用。...,如果view设置了onTouch()监听并返回true,那么click事件也会被屏蔽掉,不过我们可以在onTouch()中通过调用view的performClick()继续执行click()事件,这个就看我们的业务中的需求了...; 一个事件只能交由一个view处理; DispatchTouchEvent()总是会被调用,而且最先被调用,onInterceptTouchEvent()和onTouchEvent()在DispatchTouchEvent

72651

高级 UI 成长之路 (二) 深入理解 Android 8.0 View 触摸事件分发机制

那么自身的 onTouch会被调用,如果返回 false 其自身的 onTouchEvent 被调用 if(!onTouchListener.onTouch(v: View?...{ //3. onTouch 返回了 false ,onTouchEvent 调用,并且会调用内部的 onClick 事件 if(!...View 设置了 onTouchListener 那么自身的 onTouch 就会执行,如果 onTouch 返回值是 false ,其自身的 onTouchEvent 会被调用。...,如果自身设置了 mOnTouchListener 监听,则 onTouch 会被调用,否则 onTouchEvent 会被调用,如果 onTouchEvent 中设置了 mOnClickListener...,当父类拦截 DOWN 事件的时候,子节点 MyRecylerView 的 dispatchTouchEvent 的 DOWN 事件就会被触发,大家注意看,在 DOWN 事件中,我调用了当前根节点 ScrollerViewPager

53360

android view事件分发机制

="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android...(this, event)返回true,这三个条件如果都满足,直接return true ; 也就是下面的onTouchEvent(event)不会被执行了; 那么mOnTouchListener是和方神圣...也就是说:如果我们设置了setOnTouchListener,并且return true,那么View自己的onTouchEvent就不会被执行了,当然了,本例我们return false,我们还得往下探索...; 已经解决一个常见的问题:View的onTouchListener和onTouchEvent的调用关系,相信大家应该已经明白了~let's go;继续往下。  ...View.onTouchEvent 在dispatchTouchEvent中会进行OnTouchListener的判断,如果OnTouchListener不为null且返回true,则表示事件被消费,onTouchEvent不会被执行

1.1K60
领券