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

事件分发机制

先说说Touch Events大致的执行过程;     点击手机屏幕 ----> UIKit 会生成一个 UIEvent事件,把UIEvent分发给当前活跃着的APP ----> 活跃着的APP被告知有事件发生后 上面就是hitTest的一些概念和简单的使用,其实它能做的事还是挺多的,我把自己学习的笔记链接全都整理出来给; iOS事件分发机制(一) hit-Testing 技术哥 iOS事件分发机制(二)The Responder Chain 技术哥 iOS触摸事件处理 史上最详细的iOS之事件的传递和响应机制 Motion Events  和  Remote Control Events:     Motion

35380

事件分发机制学习

0x01 事件分发机制中三个重要的函数  View事件机制有哪几个重要函数? 0x02 事件分发的优先级  同时重写View中的onTouchEvent,设置View的onTouchListener与onClickListener  首先调用onTouchListener,若返回值为

295100
  • 广告
    关闭

    年末·限时回馈

    热卖云产品年终特惠,2核2G轻量应用服务器6.58元/月起,更多上云必备产品助力您轻松上云

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

    Android 事件分发机制

    事件分发机制在android中非常常见,比如:手势滑动,自定义View,多点触控都有它的身影。 1.4 onTouch 是触摸事件,当一个触摸事件被分发到一个view的时候。 2.我们刚才是正常的事件分发流程图,没有给View即TextView设置click事件,那我们现在给TextView设置点击事件看看,事件是怎么分发的? ? image.png 可以看到如果给View设置了click事件,那么事件会最终分发给view,被view消费,这就是我们平时最常用的事件分发流程 3.其他的你们都可以在个个阶段的事件分发中,返回不同的值去测试验证 ,方法多了,我们可以在不同的阶段进行控制,不让事件向下分发,但我们试试onTouch()这个方法,此方法默认返回false,我们现在让它返回true试试。

    65310

    Android事件分发机制

    image.png 原文链接:https://juejin.im/post/5eb3e0d6f265da7c002028cd 这次说下Android中的事件分发机制 从开始点击屏幕开始,就会产生从 每一层view或者viewgroup都会首先调用它的dispatchTouchEvent方法,然后判断是否就在当前一层消费掉事件 view的事件分发 首先上一段伪代码,是在书上看到的,也是我觉得总结的最好的 这就符合了之前的所说的一种机制: 某个view一旦开始拦截,那么后续事件就全部就给它处理了,也不会执行onInterceptTouchEvent方法了 但是,两个条件满足了一个,就能执行到onInterceptTouchEvent 事件分发的应用(requestDisallowInterceptTouchEvent) 那既然学会了事件分发机制,我们实际工作中会怎么应用呢?其实最常见的就是解决滑动冲突的问题。 至此,事件的分发机制也就说的差不多了。 文末 您的点赞收藏就是对我最大的鼓励! 欢迎关注我,分享Android干货,交流Android技术。

    16520

    View的事件分发机制

    Android View事件分发机制 ---- 当一个点击事件产生后,他的传递过程遵循Activity->Window->View的逐级传递。我们这里讨论的是在Android系统View里事件传递。 大家知道Android的View是由顶向下的树形结构,有点像HTML的DOM树,点击事件分发就是各层View和ViewGroup对MotionEvent的传递,最终传递到一个具体的View,由他来消费这个 MotionEvent.下面介绍事件分发三个重要的方法。 他们的执行顺序是:1、dispatchTouchEvent ; 2、setOnTouchListener的onTouch ; 3、onTouchEvent 这里在说一下View和ViewGroup在事件传递机制的不同的地方 Android View事件机制 21问21答 Android View 事件分发机制源码解析(上) Android ViewGroup事件分发机制

    15510

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

    《个人平时笔记,看到的同学欢迎指正错误》 1、事件分发机制:整个事件分发是一个U形传递的,递归传递。 图解 Android 事件分发机制 一个事件是指一个MotionEvent.ACTION_DOWN事件或MotionEvent.ACTION_MOVE事件或MotionEvent.ACTION_UP事件等 ,同时开始往父控件回溯(同时回溯后父控件的onTouchEvent开始从下往上回传直到某个onTouchEvent return true消费事件而停止),事件分发机制就像递归,return false ) 3、下图理解(图解 Android 事件分发机制一文中):事件为U型传递,ViewGroup2消费事件,则消费ACTION_DOWN返回true,事件分发到此为止;ViewGroup2既然能消费事件 ,如果不需要此事件就不拦截,这样就可以解决滑动冲突的问题,这种方法比较符合点击事件的分发机制

    36540

    事件分发机制三问

    只要有点击,就会涉及到事件分发机制,点击屏幕后,view会怎么反应?今天一起来看看事件分发机制的三问: Activity、View、Window 之间的关系。 说说Android的事件分发机制完整流程,也就是从点击屏幕开始,事件会怎么传递。 解决滑动冲突的办法。 Activity、View、Window 之间的关系。 说说Android的事件分发机制完整流程,也就是从点击屏幕开始,事件会怎么传递。 我觉得事件分发机制流程可以分为三部分,分别是从外传里,从里传外,消费之后。 解决滑动冲突的根本就是要在适当的位置进行拦截,那么就有两种解决办法: 外部拦截:从父view端处理,根据情况决定事件是否分发到子view 内部拦截:从子view端处理,根据情况决定是否阻止父view进行拦截

    26150

    图解 Android 事件分发机制

    ev); } Activity 实现了 Window.Callback 接口,所以接下来会调用 Activity 的 dispatchTouchEvent,所以可以将 Activity 作为原始的事件分发者 2、事件分发、拦截与消费 类型 相关方法 Activity ViewGroup View 事件分发 dispatchTouchEvent √ √ √ 事件拦截 onInterceptTouchEvent 3、事件分发流程 Android View 是树形结构,事件分发流程采用的是责任链模式。 onInterceptTouchEvent 返回 true 表示事件拦截,onTouchEvent 返回 true 表示事件消费, 5、事件在从 Activity.dispatchTouchEvent 往下分发的过程中 如果中间任何一层 ViewGroup 拦截事件,则事件不再往下分发,交由拦截的 ViewGroup 的 onTouchEvent 来处理。

    2.4K30

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

    ——》个人平时笔记,看到的同学欢迎指正错误,文中多处摘录于各大博主精华、书籍 1、事件分发机制:整个事件分发是一个U形传递的,递归传递。图解 Android 事件分发机制 ? ) 4、下图理解(图解 Android 事件分发机制一文中):事件为U型传递,ViewGroup2在onTouchEvent消费事件,事件序列都返回true,事件分发到此为止;ViewGroup2既然能消费事件 image 5、解决滑动冲突的方式:外部拦截法和内部拦截法 参考-View的事件分发机制和滑动冲突解决方案 外部拦截法:是指点击事情都先经过父容器的拦截处理,如果父容器需要此事件就拦截,如果不需要此事件就不拦截 ,这样就可以解决滑动冲突的问题,这种方法比较符合点击事件的分发机制。 intercepted; } 内部拦截法:是指父容器不拦截任何事件,所有的事件都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交由父容器进行处理,这种方法和Android中的事件分发机制不一致

    47430

    android view事件分发机制

    可以看到LongClickListener已经ClickListener都触发了~ 最后,本篇博文完成了对View的事件分发机制的整个流程的说明,并且对源码进行了分析; 当然了,View结束,肯定到我们的 ViewGroup了,请点击:Android ViewGroup事件分发机制

    41160

    android viewgroup事件分发机制

    今天给大家代码ViewGroup事件分发的源码解析~~凡是自定义ViewGroup实现各种滑动效果的,不可避免的会出现很多事件的冲突,对ViewGroup事件分发机制的了解,也有益于大家了解冲突产生的原因 super.requestDisallowInterceptTouchEvent(disallowIntercept);       }   }   继承LinearLayout,然后复写了与事件分发机制有关的代码 View身上,如果在,47行,执行child.dispatchTouchEvent(ev),就进入了View的dispatchTouchEvent代码中了,如果不了解请参考:Android View的事件分发机制 ViewGroup的ACTION_DOWN分析结束,总结一下: ViewGroup实现捕获到DOWN事件,如果代码中不做TOUCH事件拦截,则开始查找当前x,y是否在某个子View的区域内,如果在,则把事件分发下去 return target.dispatchTouchEvent(ev);  可以看到,正常流程下,ACTION_MOVE在检测完是否拦截以后,直接调用了子View.dispatchTouchEvent,事件分发下去

    42460

    图解 Android 事件分发机制

    在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android 废话不多说,总结一句:事件分发机制很重要。 Android 事件分发流 关于Android 事件分发机制网上的博文很多,但是很多都是写个Demo然后贴一下输出的Log或者拿源码分析,然后一堆的注释和说明,如果用心的去看肯定是收获不少但是确实很难把整个流程说清和记住 return true),事件分发机制就像递归,return false 的意义就是递归停止然后开始回溯。 的事件分发没有上面提到的4个目标的第3点。

    76090

    Android事件分发机制详解

    事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_UP等 2、 onInterceptTouchEvent()(只有ViewGroup才有这个方法,View没有这个方法,且ViewGroup是View的子类); 二、方法功能介绍 1、dispatchTouchEvent事件分发的调度者与指挥者 事件传递流程:事件—>Activity—>Window—>DecorView—>ViewTree(嵌套在一起的各种控件) 一个事件,首先会由Activity的dispatchTouchEvent方法接受,然后分发到附着在 Activity上的Window,Window不进行处理直接分发到ViewTree;最外层的ViewTop(默认为是ViewGroup类型的)会先调用自己的dispatchTouchEvent方法,然后由 dispatchTouchEvent调用onInterceptTouchEvent方法,如果返回true,调用自己的onTouchEvent方法;如果返回false,继续向下一个控件进行事件分发

    33540

    Android事件分发机制的详解

    Android事件分发机制 我们只考虑最重要的四个触摸事件,即:DOWN,MOVE,UP和CANCEL。

    38931

    Android--事件分发机制(二)

    上次说到View的事件方法,并查看了源码,今天我们更加深入源码,了解事件分发的前世今生 以前分析Activity启动流程时,我们知道Activity是由PhoneWindow,DecorView,我们xml 中写的布局、控件等组成,很显然事件分发首先被接受到的是Activity,果然在Activity中也发现了dispatchTouchEvent方法 public boolean dispatchTouchEvent //对子控件进行重排序,主要是为了排序重叠的控件,在上层的控件优先能够分发到事件(ACTION_DOWN) final ArrayList<View> preorderedList mInputEventConsistencyVerifier.onUnhandledEvent(ev, 1); } return handled; } 我们发现真正的分发是在 transformedEvent.recycle(); return handled; } 事件分发中,最复杂的就是事件的开始,即ACTION_DOWN事件,最后,总结了事件分发的流程草图

    23110

    Android源码解读-事件分发机制

    14950

    IOS触摸事件分发机制详解

    前言 很多时候大家都不关心IOS触摸事件的分发机制的实现原理,当遇到以下几种情形的时候你很可能抓破头皮都找不到解决方案: 某个点击消息由父视图来处理,子视图怎么把消息传递给父视图 这个按钮不灵敏,怎么扩大点击响应区域 通过控制Hit-test view 、人为干预响应者能否对这一事件作出响应最终来控制触摸事件的分发机制。 IOS把用户触发事件打包成一个UIEvent对象,作为事件传递的消息载体,放入当前活跃的APP的消息队列中,然后通过Hit-Testing来找到响应者,响应者通过响应链的传递做出响应,这就是IOS事件分发机制的实现原理 参考文献 UIResponder Class Reference UIResponder Class Reference Event Handling Guide for iOS 深入浅出iOS事件机制

    1.7K90

    进阶必备-Android事件分发机制

    一、简介 或许你会问,“为什么我一定要知道View的事件分发机制?”。因为我们在实际开发的过程中,经常会遇到多层的View互相嵌套以后,对某一个View进行滑动的时候,特别不灵敏,甚至于没法滑动。 这种滑动冲突的解决需要我们清楚的掌握View的事件分发机制。那下面我们详细的讲解下View的整个事件机制。 下面我们介绍和事件分发相关的几个方法: dispatchTouchEvent(MotionEvent event) 这个方法是用来处理向下分发事件逻辑的,我们通过观察ViewGrope源码中的代码知道, onInterceptTouchEvent(MotionEvent event) 用来申明是否拦截事件继续向下分发,如果返回true,事件将不会继续向下分发,而是交由自己的onTouchEvent方法处理 二、详细分析View的分发事件 我们都知道,Android的View是树形结构的,所以当一个事件来临的时候一般是从根部分发下来的。

    59040

    Android事件分发机制 源码级

    事件分发.png 开篇先明确几点 1.有三东西挺长的,又长得挺像,看着晃眼且心烦,文中以下简写为: |-- 分发 dispatchTouchEvent = d16t |-- 截断 onInterceptTouchEvent = o19t |-- 消费 onTouchEvent = o10t 2.事件分发机制的参与者与各自拥有的回调方法: |-- 灰色 Activity: o10t 由于消费在分发之前,消费是不会阻碍分发的,但分发会影响消费 老婆(Activity):给你100块当做一月生活费,这叫分发dispatchTouchEvent,生活费相当MotionEvent 你( 追踪了一下: addView(一参)-->addView(两参)-->addView(三参)-->addViewInner-->addInArray ---- 小结: 总的来说源码看下来,感觉view事件分发机制也并不像我想像中的那么难 在自定义View中至多也就是ViewGroup+子View的触摸事件协调,Activity一般不参和 Activity的事件分发实质上是DecorView的事件分发,所以都是View家的,Activity

    25220

    解析Android点击事件分发机制

    开头说说初衷 网上关于点击事件分发的文章一搜一大堆,标题一看,不是“30分钟让你弄明白XXX”就是“这是讲解XXX最好的文章”,满怀憧憬与信心,忍不住兴奋的点进去一看,发现不是代码就全是图,我基本上看完了所有相关的文章 事件的分发,从上到下,从Activity到Layout到Text的dispatchTouchEvent结束 2. 默认可点击控件的事件分发 比如Button这种默认可以点击的控件,或者设置android:clickable=”true”的控件,在分发流程中有一些不同,主要是onTouchEvent的默认方法不同,它直接消耗点击事件 可点击View的事件分发流程 ? 结语 事件的分发流程到此就结束了,目的已经达到了,找到了我们想要点击的那个按钮或者其他控件,总结下来就是从Activity经过ViewGroup然后到View依次分发,然后又从底向上确认自己是否消耗该事件

    51010

    扫码关注腾讯云开发者

    领取腾讯云代金券