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

onInterceptTouchEvent()是否真的像sdk所说的那样工作?

onInterceptTouchEvent()是Android中的一个方法,用于拦截触摸事件。它通常用于在ViewGroup中决定是否拦截子View的触摸事件,从而实现事件的分发和处理。

根据Android官方文档的描述,onInterceptTouchEvent()方法在触摸事件序列开始时被调用。它的返回值决定了是否拦截该事件。如果返回true,则表示拦截事件并交给自身的onTouchEvent()方法处理;如果返回false,则表示不拦截事件,将事件传递给子View进行处理;如果返回super.onInterceptTouchEvent(),则表示使用默认的拦截逻辑。

然而,实际上onInterceptTouchEvent()的工作方式可能会受到多种因素的影响,包括但不限于以下几点:

  1. 触摸事件的传递顺序:onInterceptTouchEvent()方法只有在父ViewGroup的dispatchTouchEvent()方法中被调用,而dispatchTouchEvent()方法会根据事件分发的顺序来调用onInterceptTouchEvent()。因此,如果事件在传递过程中被子View消费或拦截,那么onInterceptTouchEvent()可能不会被调用。
  2. 子View的实现:子View可以通过重写onTouchEvent()方法来消费触摸事件,从而阻止父ViewGroup的onInterceptTouchEvent()方法被调用。这种情况下,onInterceptTouchEvent()将无法拦截事件。
  3. 多点触控:onInterceptTouchEvent()方法对于多点触控事件的处理可能会更加复杂。需要根据具体的业务逻辑来判断是否拦截事件。

综上所述,onInterceptTouchEvent()方法的工作方式并不完全像SDK所描述的那样简单。它受到多种因素的影响,包括事件传递顺序、子View的实现以及多点触控等。因此,在实际开发中,我们需要根据具体的需求和场景来正确地实现和使用onInterceptTouchEvent()方法。

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

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

相关·内容

Android自定义滑动删除效果实现代码

Item 是否应该滑动;但是有一个问题就是,用户 DOWN 时候获得焦点 Item ,但是 MOVE 时候手指离开了该 Item 时候应该如何处理呢?...,而这些都是用户不友好 另外,现有的资料都是在自己代码实现上讲解,对于实现正真的定制化还是很有难度,当我们想要实现自己想要功能时,我们还需要去看懂一些不相关处理逻辑 (2)....(即对应上面的 现有资料中不足 中第2项);如下图所示,手指 DOWN 时候得到焦点是 Item 7, 但是之后手指在 MOVE 过程中,Item 7 失去了焦点;正如上面所说,此时还是应该交由该...或者 true,但是在 onInterceptTouchEvent DOWN 判断中调用rv.setLayoutFrozen(true);方法,那么 onInterceptTouchEvent 只会收到一个...事件中去判断,如果 x 向速度大于 y 向速度,那么可以判断为是 Item 横向滑动,直接 return true 即可,正如上面分析那样,之后直接在 onTouchEvent 方法中处理 Item

1.1K20

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

一谈到点击事件机制,网上资料已经非常齐全了,什么分发、拦截、处理三大流程啊;或者 dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent 啊;再或者返回...最简单区别就是,在 Tv 开发中已经不是再像触屏手机那样通过 dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent 来分发处理了,取而代之则是需要使用...View ,因为它并没有 onInterceptTouchEvent 这种在某一层拦截操作。...明确 super 含义,重写方法一般都会执行一下默认逻辑工作,比如 dispatchKeyEvent 执行事件分发,重写时候注意是否还需要使用父类逻辑即可。...SDK 里,DecorView 是 PhoneWindow 内部类,这部分内容也留着下次一起梳理吧。

3.5K60
  • Android事件分发机制抽象--钓钩模型

    这就不禁让我想到了工作中令人难忘事--写线上故障 CaseStudy ,相信亲身经历过小伙伴一定忘不了直击灵魂深处 “5 Whys”(针对问题原因层层递进问 5 个为什么,差不多也就从事物表象深入到了本质...onInterceptTouchEvent是否拦截事件。若拦截事件,则事件不会分发给子控件,而是直接给自己消费。...这个问题看似简单,但实际能回答上来才是真的高手。 ? 画一幅时序图总结一下:▼ ? 但可能有同学会问,不设置按键监听情况下,没啥实际意义,大部分人不会关心这种情况,换一题。 ?...通过观察事件分发流程,发现有点钓鱼: 第一步先放下鱼饵等鱼上钩(DOWN 事件分发),找到最终一个 U 型路径,有点钓鱼钩,这也是模型名称由来。...第二步将鱼线收回来(MOVE / UP / CANCEL 事件分发),这个阶段是否消费(onTouchEvent 返回值)不重要,重要是否拦截(onInterceptTouchEvent),拦截只能是在当前

    68220

    以太坊新系统还不是很稳定

    为了成功完成这次转变,所有节点(运行系统电脑)都需要安装更新–在全球化平台上同时发生一次以太坊系统转变。但是,对于拜占庭分叉这件事,其实并不完全是它发生那样。...因此,有些人会怀疑是否使用以太坊是否还是安全,根据现在事态发展,这仍然是个问题。举例来说,市面上有几类软件客户端错误,而且有几个甚至有“共识缺陷”,这类问题会导致无意中创建多个以太坊区块链。...当然,以太坊不会再监测这些节点,所以如果真的有缺陷出现,他是不会在任何一个区块链浏览器上可见。并且,这些缺陷会真的用在旧系统上吗?...也许以太坊这样系统要有如此重大改变是一段很长过程,但是这并不是说在发行之前没有经过很严格安全测试。...这是以太坊新安全检测方案,根据代码开发人员Peter Szilagyi解释道:“需要进一步磨合和努力来使得它能成为工作流程一部分。”

    624150

    ScrollView内嵌套EditText导致EditText无法滑动

    最近也碰到这样问题  搜索了网上一个答案  解决方法有两种,这个里面完成是照着别人思路来, 第一种思路就是  把 EditText 放在 ScrollView里面,重新自定义一个ScrollView...   那个代码不是很方便,我感觉他自定义Scrollview里面的onInterceptTouchEvent这个方法不好,导致我们需要在实现类中还需要去构造这样ScrollView   不是很方面...(ev); } /** * 是否把滚动事件交给父scrollview * @param flag */ private void...background="@null" android:gravity="left" android:hint="对您想找工作做简要描述...EditText 或者XWEditText都是可以可以找到这个控件,然后不用做任何设置,就跟EditText那样用就行了,

    1.1K30

    dispatchTouchEvent事件分发浅析(七)requestDisallowInterceptTouchEvent

    上一篇,我们大体理解了对应ACTION_DOWN 之后 对应ACTION_MOVE 和 ACTION_UP 简单过程 当然,还分是否消费等 具体代码可以见https://github.com...我们可以看看API 在androidsdk,对应 XxxAndroidSdkDir/docs/reference/android/view/ViewGroup.html (因为这里不是将ViewGroup... **onInterceptTouchEvent ** public boolean onInterceptTouchEvent(MotionEvent ev) { return...mGroupFlags 值 ---- 最后,我们回到 上面贴 dispatchTouchEvent 方法中, 判断是否onInterceptTouchEvent(ev)地方 如果 disallowIntercept...对应 onInterceptTouchEvent(MotionEvent ev) 方法 调用 requestDisallowInterceptTouchEvent(true); 即可 经检验, 是可以

    1.2K10

    Android事件分发机制

    每一层view或者viewgroup都会首先调用它dispatchTouchEvent方法,然后判断是否就在当前一层消费掉事件 view事件分发 首先上一段伪代码,是在书上看到,也是我觉得总结最好...这就符合了之前所说一种机制: 某个view一旦开始拦截,那么后续事件就全部就给它处理了,也不会执行onInterceptTouchEvent方法了 但是,两个条件满足了一个,就能执行到onInterceptTouchEvent...事件分发应用(requestDisallowInterceptTouchEvent) 那既然学会了事件分发机制,我们实际工作中会怎么应用呢?其实最常见就是解决滑动冲突问题。...一般有两种解决办法: 一种是外部拦截:从父view端处理,根据情况决定事件是否分发到子view 一种是内部拦截:从子view端处理,根据情况决定是否阻止父view进行拦截,其中关键就是requestDisallowInterceptTouchEvent...因为onInterceptTouchEvent方法调用是被FLAG_DISALLOW_INTERCEPT标志位所控制,所以子view需要父view拦截时候,才会走到这个onInterceptTouchEvent

    88320

    【原理篇】WebView 实现嵌套滑动,丝滑般实现吸顶效果,完美兼容 X5 webview

    对于一个 ACTION_MOVE 动作 scrolling child 在滑动之前,会通过 NestedScrollingChildHelper 查找是否有响应 scrolling parent,如果有的话...,会先询问scrolling parent 是否需要先于scrolling child 滑动,如果需要的话,scrolling parent 进行相应滑动,并消费一定距离; 接着scrolling...child 进行相应滑动,并消耗一定距离值 dx,dy scrolling child 滑动完之后,询问scrolling parent 是否还需要继续进行滑动,需要的话,进行相应处理。...手指抬起时候(Action_up) 时候,根据滑动速度,计算是否相应 fling 而我们 WebView 如果要实现嵌套滑动,那就可以借助这套机制。...他在里面有一个 getView 方法。 拿到这个对象之后,我们有办法进行拦截处理嘛, onTouchEvent, onInterceptTouchEvent 方法?

    1.1K10

    这次,我把Android事件分发机制翻了个遍

    每一层view或者viewgroup都会首先调用它dispatchTouchEvent方法,然后判断是否就在当前一层消费掉事件 view事件分发 首先上一段伪代码,是在书上看到,也是我觉得总结最好...这就符合了之前所说一种机制: 某个view一旦开始拦截,那么后续事件就全部就给它处理了,也不会执行onInterceptTouchEvent方法了 但是,两个条件满足了一个,就能执行到onInterceptTouchEvent...事件分发应用(requestDisallowInterceptTouchEvent) 那既然学会了事件分发机制,我们实际工作中会怎么应用呢?其实最常见就是解决滑动冲突问题。...一般有两种解决办法: 一种是外部拦截:从父view端处理,根据情况决定事件是否分发到子view 一种是内部拦截:从子view端处理,根据情况决定是否阻止父view进行拦截,其中关键就是requestDisallowInterceptTouchEvent...因为onInterceptTouchEvent方法调用是被FLAG_DISALLOW_INTERCEPT标志位所控制,所以子view需要父view拦截时候,才会走到这个onInterceptTouchEvent

    2.2K30

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

    顾名思义,ViewGroup就是一组View集合,它包含很多子View和子VewGroup,是Android中所有布局父类或间接父类,LinearLayout、RelativeLayout等都是继承自...disallowIntercept是指是否禁用掉事件拦截功能,默认是false,也可以通过调用requestDisallowInterceptTouchEvent方法对这个值进行修改。...那么当第一个值为false时候就会完全依赖第二个值来决定是否可以进入到条件判断内部,第二个值是什么呢?竟然就是对onInterceptTouchEvent方法返回值取反!...也就是说如果我们在onInterceptTouchEvent方法中返回false,就会让第二个值为true,从而进入到条件判断内部,如果我们在onInterceptTouchEvent方法中返回true...之后处理逻辑又和前面所说是一样了,也因此MyLayout中注册onTouch方法会得到执行。之后代码在一般情况下是走不到了,我们也就不再继续往下分析。

    1.2K100

    谈谈程序员解决问题能力

    小巫这个公众号不会某些网红那样每天都想破脑袋去写文章,也不期望这个公众号能给我带来什么,毕竟以我尿性我让我每天写鸡汤文我自己都会恶心。...之前写过一些文章,有的同学想让我写写在鹅厂一些经验,其实说真的,在鹅厂工作也是因人而异,不管在哪里工作最终还是取决于你是怎么赋予工作意义,每天纠结自己工作重复繁重,纠结工作技能得不到提升,纠结薪水满足不了自己欲望...问题根本也不在于这些,而是你是否足够沉得住气去提升自己。如果你连日常工作一些问题都解决不好,你也别期望自己能在很短时间内提升很高水平。...还是那句话,就算你有十年工作经验,如果你只是一年工作经验用了十年,那真的怪不得别人比你厉害了,人到中年时候那真的有危机了。...吐槽一些开发者白纸一般脑袋 之从做了SDK开发者之后,每天帮助用户解决各种各样问题,那我真的有理由相信为什么国外月亮会比国内月亮圆了,因为国内一些开发者真的让我很方啊。

    1.4K60

    android基于SwipeRefreshLayout实现类QQ侧滑删除

    回去后和一朋友讨论,朋友找了以后说了一句,这种功能没有8K以上是写不出来(⊙﹏⊙)b。现在看来当时真的太天真了。而如今自己也没有8K还是尝试去写写,顺便当练练手。...判断后设置一个标记,下一次滑动时候如果上下滑动(Listiview)滑动那么就调用父类onInterceptTouchEvent方法正常滑动,此时事件在到达侧滑菜单时候已经被消费了所有不会滑出侧滑菜单...();//记录按下Y坐标 break; case MotionEvent.ACTION_MOVE: //判断滑动距离是否是正常滑动 if (Math.abs...点击:此情况下不做任何处理 2.当滑出侧滑菜单栏以后,点击其他item时,这是判断是否是当前滑出侧滑菜单position如若不是在down事件时候变将其关闭并且 return true当在onInterceptTouchEvent...中retur true 后此后所有的事件,直到手指抬起时所有操作都交由自身onTouchEvent处理而在onTouchEvent中也不做任何操作直接拦截即可达到需要效果 判断是否是点击的当前滑出菜单

    86410

    ViewPager源码分析

    | 导语 ViewPager是一个很常用Android组件,其提供接口和功能基本已经可以满足项目的大部分需要,但如果需要定制一些不一样行为,比如实现一个类似iOS多任务那样的卡片列表控件,熟悉和修改...自定义ViewGroup触摸事件处理,即dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent 3个方法。...3.2 onInterceptTouchEvent        onInterceptTouchEvent作用是判断是否要拦截事件,返回true则后续事件会传给onTouchEvent处理,这里重点看...1.jpg 再来看看move事件,主要工作是判断手指左右滑动距离,超过一定阙值后就把mIsBeingDragged设为true,说明ViewPager要消费这个事件,最终拖动逻辑在onTouchEvent...1.jpg        move事件主要做两件事,第一件事是当mIsBeingDragged为false时,重新检测一下当前是否符合左右滑动条件(mIsBeingDragged为false时为啥会回调

    1.7K40

    这可能是2020大小厂问最经典Android面试题了——事件分发机制、View渲染过程

    3.ViewGroup 拦截器onInterceptTouchEvent 默认是不拦截,所以return super.onInterceptTouchEvent()=return false; 4....由于View没有子View所以不需要onInterceptTouchEvent 来控件是否把事件传递给子View还是拦截,所以View事件分发调用super.dispatchTouchEvent()时候默认把事件传给自己...判读是否重新计算视图大小(measure) image.png 原理: 从顶层父View子View递归调用view.measure(),measure方法中回调onMeasure() MeasureSpec...是否重新分配视图位置(layout) image.png 原理: layout也是从顶层父View向子View递归调用View.layout方法过程,父View根据上一步measure子View得到布局大小和布局参数...不知不觉自己已经做了几年开发了,由记得刚出来工作时候感觉自己能牛逼,现在回想起来感觉好无知。懂越多时候你才会发现懂越少。 如果你知识是一个圆,当你圆越大时,圆外面的世界也就越大。

    1K20

    代码中上下文:人工智能如何帮助我们改进文档

    正如创始人 Dennis Pilarinos 所说: 为此,Unblocked 不仅可以 Sourcegraph Cody 那样获取你代码存储库,还可以获取相关材料——你网站、产品文档、你在...这是一种与我们习惯截然不同搜索。我无法假装知道它是如何工作,我也不确定是否有人能完全解释它,但我天真理解是,当你向 LLM 提出这种问题时,你并不是在寻找单词,而是在寻找一种模式。...解释模式 我目标是阐明 Steampipe 插件 SDK 支持模式,并将其融入构建在 SDK 之上插件套件中。...在这种情况下,对于 José Reyes 这样专家来说,预先存在文档可能就足够了,他可以跳入代码库并直观地——立即且深入地——了解正在发生事情。我不像他那样,我相信许多其他人也不像他那样。...我在这里收获是我从未考虑过事情。一旦 Unblocked 等工具吸收了我们文档,我们就可以提出我们希望文档回答问题,并检查它们是否确实如此。此类工具甚至可以提出问题以进行此类压力测试。

    7610

    View滑动冲突分析和处理实践

    对于场景二:外部滑动方向和内部滑动方向一致,比较特殊,因为内外部滑动方向一致,我们就不能场景一那样处理了,这就需要我们从业务上找突破点了,根据业务具体要求来决定是外部还是内部View来拦截处理事件...外部拦截法 就是指点击事件都先经过父容器拦截处理,如果父容器需要此事件则拦截,即重写父容器 onInterceptTouchEvent 方法,示例如下: private float lastEventX...就是值父容器不拦截任何事件,所有事件都传递给子元素,如果子元素要处理就直接消耗掉,否则再传递给父容器,这里子元素需要配合 requestDisallowInterceptTouchEvent(true) 才能正常工作...中分析过,“FLAG_DISALLOW_INTERCEPT 在 DOWN事件时候也会被重置,因此,对于 DOWN 事件,ViewGroup 总是通过 onInterceptTouchEvent 来判断是否拦截...---- 外部拦截法 我们首先通过外部拦截法来解决这个问题,重写 HorizontalScrollerView onInterceptTouchEvent 方法,在滑动时候,如果水平滑动距离大于竖直滑动距离就拦截事件

    49040

    View事件分发机制

    大家知道AndroidView是由顶向下树形结构,有点HTMLDOM树,点击事件分发就是各层View和ViewGroup对MotionEvent传递,最终传递到一个具体View,由他来消费这个...boolean onInterceptTouchEvent(MotionEvent ev) 在上面个方法内执行,用来判断是否拦截事件,返回结果表示是否拦截当前事件。...boolean onTouchEvent(MotionEvent ev) 在dispatchTouchEvent中调用,用来消费事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前...Android源码中ViewGroup源码onInterceptTouchEvent方法默认返回false。...而View没有onInterceptTouchEvent方法,一旦有点击事件传递给他,他onTouchEvent就会调用。 Viewenable属性不影响onTouchEvent默认返回值。

    40210

    ViewGroup源码解读

    并通过onInterceptTouchEvent判断是否需要拦截。...接下来操作,当然就是检查是否需要拦截事件拉。既然是拦截,当然就会走onInterceptTouchEvent这个方法了。...我们来看看,viewgrouponInterceptTouchEvent方法是怎么处理。 ? 我们可以发现,他默认就是false。那么我们继续回到dispatch看。...如果没有取消并且没有拦截就执行正常事件处理。 如果事件是针对可访问性焦点视图,我们将其提供给具有可访问性焦点视图。如果它不处理它,我们清除该标志并往常一样将事件分派给所有的 ChildView。...我们会发现,他先判断状态是否取消,如果取消了,把当前事件变成取消状态,然后在判断是否有子view。如果有子view的话直接调用子viewdispatch事件。

    82380
    领券