在画板上延伸业务的事件,可以通过画板本身,利用路由事件分发,此时能解决依赖事件业务对具体业务对象的依赖 背景 先来聊聊白板应用的背景 基础的白板可以认为是有一个画板 Board 而在画板上面有很多纸张页面...而通过切换纸张 Slide 可以做到切换页面 多的我也不讲了,因为了解这个行业的小伙伴自然了解哈 那这里要聊的事件分发是什么呢?...就是附加在画板上的各个交互,例如我有一个笔的功能,这个笔的功能是一个个独立的类,这个类知道画板以及页面的存在。...这个类需要对外抛出事件,例如抛出开始写字以及完成写字的事件 那么我在其他的业务可以如何监听到这些事件呢?...,路由事件会在视觉树上面一层层分发,在画板或画板的容器可以让业务去拿到这个路由事件 ?
其实现类是PhoneWindow。...所有的事件分发都是首先从Activity的dispatchTouchEvent方法开始 然后再判断当前事件是否是down事件,是Down事件于是就调用onUserInceration方法 再通过Activity...的根view,通过以上源码阅读得知就是FragmentLayout,也就是ViewGroup将事件分发给子view,接着调用Activity的setContentView方法加载view 当Activity...方法;当子view没有处理事件就交给viewgroup处理,如果还没有处理事件,一直向上传递,最后交给Activity来消费该事件 Activity onUserInteraction 分析 public...void onUserInteraction() {} 空实现方法,简单解释: 每当Key,Touch,Trackball事件分发到当前Activity就会被调用。
= null) { //这里调用了TouchDelegate类中的onTouchEvent方法,该方法是dispatchEvent返回为true时,才返回true,此时 onTouchEvent就返回true...onTouchEvent会在ACTION_UP手势方法中调用performClick()方法,performClick()中调用了onClick方法,触发onClick监听 当dispatchEvent事件分发时...,只有前一个action返回为true时,后一个action才会触发 View事件分发面试问题 事件分发中的 onTouch 和 onTouchEvent 有什么区别,该如何使用 这两个方法都是在 View...对于这一类控件,如果我们想要监听它的 touch 事件,就必须通过在该控件中重写 onTouchEvent 方法来实现,相关代码块如下: if (onFilterTouchEventForSecurity...onClick事件执行,onTouch在事件分发方法dispatchTouchEvent中调用,而onClick在事件处理方法onTouchEvent中被调用,onTouchEvent要后于dispatchTouchEvent
实际上,ViewRootImpl和WMS通信来完成所有实际工作:创建窗口,对View的绘制和事件分发。...ViewRootImpl对事件的分发过程是在主线程中的(它的创建线程和其使用MessageQueue接收事件决定的),而且每次会分发其收到的所有消息。...事件传递 View和ViewGroup两个类对dispatchTouchEvent()方法提供了不同的实现。...并且它使用TouchTarget类来保存可能的传递目标,作为后续事件传递的依据,后续的事件不再应用down事件那样的规则。...事件类型 action表示事件的动作类型,即上面描述的down、move、up等,不过MotionEvent类提供了更详细的划分。
//down事件是一切事件的开端,所以首先进行down事件一系列初始化操作 if (actionMasked == MotionEvent.ACTION_DOWN) { ...//检查是否拦截事件 final boolean intercepted; //如果当前事件为down事件并且mFirstTouchTarget不为空,即找到目标组件,就进方法,否则拦截事件...//设置split标记作用是将事件分发给多个子view final boolean split = (mGroupFlags & FLAG_SPLIT_MOTION_EVENTS...cancel并且没有拦截事件 if (!...transformedEvent.recycle(); return handled; } ViewGroup dispatchTouchEvent 分析总结 Android事件分发先从ViewGroup
Override的方法 boolean dispatchTouchEvent(MotionEvent ev); boolean onTouchEvent(MotionEvent ev); 他们分别是 分发事件...和 触摸事件 ---- 个人理解为: 现在要做一个面包, 让下面人做 如果下面人做了,就ok了 如果下面人没有做,需要告诉dispatch分发这个任务的人 依次传递 ?
Motion Events 传感器事件:重力、加速度。 3. Remote Control Events 远程遥控事件。...以前比较流行的中间凸起的标签栏,你有具体考虑过中间那个按钮的点击事件吗?超出标签栏那部分的点击事件你要不做处理,它能执行的到吗? ...先说说Touch Events大致的执行过程; 点击手机屏幕 ----> UIKit 会生成一个 UIEvent事件,把UIEvent分发给当前活跃着的APP ----> 活跃着的APP被告知有事件发生后...,UIApplication 单例就从事件队列中取出最新的事件,依靠 hit-Testing 找出并且返回你点击的View,让View执行事件。...上面就是hitTest的一些概念和简单的使用,其实它能做的事还是挺多的,我把自己学习的笔记链接全都整理出来给; iOS事件分发机制(一) hit-Testing 技术哥 iOS事件分发机制(二)The
Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) ---- 文章目录 Android 事件分发 系列文章目录 前言 一、获取子组件 二、当前遍历的子组件的事件分发 三、ViewGroup 事件分发相关源码...前言 接上一篇博客 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) , 继续分析 ViewGroup 的事件分发机制后续代码 ; 一、获取子组件 ----
Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) 【Android 事件分发】事件分发源码分析...dispatchTransformedTouchEvent 方法中触发调用 if (child == null) 分支的 // handled = super.dispatchTouchEvent(event) 方法 , 调用父类的事件分发方法...dispatchTransformedTouchEvent 方法中触发调用 if (child == null) 分支的 // handled = super.dispatchTouchEvent(event) 方法 , 调用父类的事件分发方法
在上一篇 《Compose 事件分发(上) 寻找触摸点》中已经介绍,在触摸 compose 组件时,会从根节点开始遍历,获取命中的 PointerInputFilter,然后对其进行事件分发,今天,我们来重点讲解一下事件的分发过程...事件 遍历子节点,本质就是遍历 pointInput,分发 final 事件 来看下 dispatchMainEventPass 的处理: override fun dispatchMainEventPass...LocalDensity.current val viewConfiguration = LocalViewConfiguration.current // 1、pointerInputFilter 的实现类是...demo 中的 detectTapGestures block() } } } 这里我们需要关注两个点: pointerInputFilter 的实现类是...2、AndroidView 组件事件分发分析 通过上面的分析知道,Compose 组件是通过 SuspendingPointerInputFilter 实现事件的处理,那 AndroidView 组件是怎么分发的呢
Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) ---- 文章目录 Android 事件分发 系列文章目录 前言 一、无障碍调用 二、判定是否首次按下 三、判定是否拦截 四、判定是否取消操作...五、ViewGroup 事件分发相关源码 前言 在上一篇博客 【Android 事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow...---- ViewGroup 事件分发相关源码 : 下面的代码中 , 逐行注释分析了 ViewGroup 的 dispatchTouchEvent 事件分发操作 ; @UiThread public
3-2 从View的dispatchTouchEvent方法说起 在Android中你只要触摸控件首先都会触发控件的dispatchTouchEvent方法(其实这个方法一般都没在具体的控件类中,而在他的父类...当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发下一个action。...4.2.1类似,只是最后up事件没有触发onClick而已(因为没有调用super)。...,和4.2.1类似。...当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发下一个action(也就是说dispatchTouchEvent返回true才会进行下一次action
Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) ---- 文章目录 Android 事件分发...系列文章目录 前言 一、获取触摸索引值 二、按照 Z 轴深度排序组件 三、ViewGroup 事件分发相关源码 前言 接上一篇博客 【Android 事件分发】事件分发源码分析 ( ViewGroup...---- ViewGroup 事件分发相关源码 : 下面的代码中 , 逐行注释分析了 ViewGroup 的 dispatchTouchEvent 事件分发操作 ; @UiThread public
】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) 【Android 事件分发】事件分发源码分析...dispatchTransformedTouchEvent 方法中触发调用 if (child == null) 分支的 // handled = super.dispatchTouchEvent(event) 方法 , 调用父类的事件分发方法...dispatchTransformedTouchEvent 方法中触发调用 if (child == null) 分支的 // handled = super.dispatchTouchEvent(event) 方法 , 调用父类的事件分发方法...dispatchTransformedTouchEvent 方法中触发调用 if (child == null) 分支的 // handled = super.dispatchTouchEvent(event) 方法 , 调用父类的事件分发方法
】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 五 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 六 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup...dispatchTransformedTouchEvent 方法中触发调用 if (child == null) 分支的 // handled = super.dispatchTouchEvent(event) 方法 , 调用父类的事件分发方法...dispatchTransformedTouchEvent 方法中触发调用 if (child == null) 分支的 // handled = super.dispatchTouchEvent(event) 方法 , 调用父类的事件分发方法
Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 五 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 六 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup
Android事件分发 分析 什么是事件的 分发 用户通过屏幕与手机交互的时候,每一次点击、长按、移动等都是一个事件。...事件分发机制:某一个事件从屏幕传递各个View,由View来使用这一事件(消费是事件)或者忽略这一事件(不消费事件),这整个过程的控制。...事件分发的对象是谁 系统把事件封装为MotionEvent对象,事件分发的过程就是MotionEvent分发的过程。...* 2.在当前ViewGroup中找到用户真正点击的View * 3.分发事件到View上 * @param savedInstanceState */...MyView中 到此,事件分发简单的流程就梳理完了
image.png 原文链接:https://juejin.im/post/5eb3e0d6f265da7c002028cd 这次说下Android中的事件分发机制 从开始点击屏幕开始,就会产生从...每一层view或者viewgroup都会首先调用它的dispatchTouchEvent方法,然后判断是否就在当前一层消费掉事件 view的事件分发 首先上一段伪代码,是在书上看到的,也是我觉得总结的最好的...事件分发的应用(requestDisallowInterceptTouchEvent) 那既然学会了事件分发机制,我们实际工作中会怎么应用呢?其实最常见的就是解决滑动冲突的问题。...一般有两种解决办法: 一种是外部拦截:从父view端处理,根据情况决定事件是否分发到子view 一种是内部拦截:从子view端处理,根据情况决定是否阻止父view进行拦截,其中的关键就是requestDisallowInterceptTouchEvent...至此,事件的分发机制也就说的差不多了。 文末 您的点赞收藏就是对我最大的鼓励! 欢迎关注我,分享Android干货,交流Android技术。
上篇文章已经分析了Android的Touch事件分发。如果没看的建议先看一下。Android View的Touch事件分发。...= null) { //DOWN //父类是否拦截 getParent().requestDisallowInterceptTouchEvent();来改变值...接着判断父类需不需要拦截,先通过(mGroupFlags & FLAG_DISALLOW_INTERCEPT) !...到这里,ViewGroups事件分发源码的流程就分析了,我们根据这个来说说上面的场景。...返回的是super,也就是false,所以就会通过dispatchTransformedTouchEvent来执行TouchView的dispatchTouchEvent,后面就是View的Touch事件分发了
事件分发机制在android中非常常见,比如:手势滑动,自定义View,多点触控都有它的身影。...1.4 onTouch 是触摸事件,当一个触摸事件被分发到一个view的时候。...2.我们刚才是正常的事件分发流程图,没有给View即TextView设置click事件,那我们现在给TextView设置点击事件看看,事件是怎么分发的? ?...image.png 可以看到如果给View设置了click事件,那么事件会最终分发给view,被view消费,这就是我们平时最常用的事件分发流程 3.其他的你们都可以在个个阶段的事件分发中,返回不同的值去测试验证...的点击事件响应怎么办,按照上面的andorid事件分发流程图,方法多了,我们可以在不同的阶段进行控制,不让事件向下分发,但我们试试onTouch()这个方法,此方法默认返回false,我们现在让它返回true
领取专属 10元无门槛券
手把手带您无忧上云