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

Android事件分发机制

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

89620

Android 事件分发机制

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

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

    android viewgroup事件分发机制

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

    97260

    图解 Android 事件分发机制

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

    1.3K90

    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,继续向下一个控件进行事件分发

    66440

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

    【工匠若水 http://blog.csdn.net/yanbober】 Notice:阅读完该篇之后如果想继续深入阅读Android触摸屏事件派发机制详解与源码分析下一篇请点击《Android触摸屏事件派发机制详解与源码分析二...就算你不自定义控件,你也必须要了解Android控件的触摸屏事件传递机制(之所以说触摸屏是因为该系列以触摸屏的事件机制分析为主,对于类似TV设备等的物理事件机制的分析雷同但有区别。...哈哈,谁让我之前是做Android TV BOX的,悲催!),只有这样才能将你的控件事件运用的如鱼得水。接下来的控件触摸屏事件传递机制分析依据Android 5.1.1源码(API 22)。...3 Android 5.1.1(API 22) View触摸屏事件传递源码分析 3-1 写在前面的话 其实Android源码无论哪个版本对于触摸屏事件的传递机制都类似,这里只是选用了目前最新版本的源码来分析而已...分析Android View事件传递机制之前有必要先看下源码的一些关系,如下是几个继承关系图: 怎么样?

    62720

    android view事件分发机制

    首先我们先写个简单的例子来测试View的事件转发的流程~ 1、案例 为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志~...="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android...OnClick事件无法触发; ii.没有设置onLongClickListener或者onLongClickListener.onClick返回false,则点击事件OnClick事件依然可以触发;...可以看到LongClickListener已经ClickListener都触发了~ 最后,本篇博文完成了对View的事件分发机制的整个流程的说明,并且对源码进行了分析; 当然了,View结束,肯定到我们的...ViewGroup了,请点击:Android ViewGroup事件分发机制

    1.2K60

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

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

    50910

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

    在安卓中如果我们需要点击一个控件,并做处理的话,首先想到的就是setOnClickListener方法和setOnTouchListener方法,而在自定义控件中,需要自己处理触摸事件的话,我们需要改写...这些方法的执行顺序和怎么被调用的,就是今天的研究课题 首先自定义一个控件,并改写onTouchEvent方法,打印日志 /** * 测试事件分发顺序 */ public class MyView extends...final int ACTION_UP = 1; public static final int ACTION_MOVE = 2; 所以一个控件触摸事件的顺序是先调用...boolean dispatchTouchEvent(MotionEvent event) { //AccessibilityService是辅助残疾人士使用手机的功能,可以模拟触摸事件...,首先在事件分发前, //会判断是否是模拟触摸事件 // If the event should be handled by accessibility focus first

    66930

    Android高频面试专题 - 提升篇(三)事件分发机制

    关于事件分发机制的流程,网上博客已经讲烂了。...1、事件分发机制分发的是什么 当用户点击屏幕里View或者ViewGroup的时候,将会产生一个事件对象,这个事件对象就是MotionEvent对象,这个对象记录了事件的类型,触摸的位置,以及触摸的时间等...DecorView传递到Activity,最终又回到DecorView,最后按照分发机制分发到ViewGroup再到所有的子View。...5、事件分发流程 事件分发机制使用的是责任链设计模式,从Activity如果传到最下层的View都没有组件处理该事件,该事件会依次回传到Activity。这里面就涉及到3个重要的方法: ?...//事件分发机制伪代码public boolean dispatchTouchEvent(MotionEvent ev){ boolean consume = false;//记录返回值 if

    2.4K42

    Android事件分发机制源码解析

    触摸事件传递机制Android中一块比较重要的知识体系,了解并熟悉整套的传递机制有助于更好的分析各种滑动冲突、滑动失效问题,更好去扩展控件的事件功能和开发自定义控件。...预备知识 MotionEvent 在Android设备中,触摸事件主要包括点按、长按、拖拽、滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作等。...一个最简单的用户触摸事件一般经过以下几个流程: 手指按下 手指滑动 手指抬起 Android把这些事件的每一步抽象为MotionEvent这一概念,MotionEvent包含了触摸的坐标位置,点按的数量...几个方法 事件分发过程中,涉及的主要方法有以下几个: dispatchTouchEvent: 用于事件分发,所有的事件都要通过此方法进行分发,决定是自己对事件进行消费还是交由子View处理 onTouchEvent...2.将事件依次分发给子View,若事件被某个View消费了,将不再继续分发; 3.如果2中没有子View对事件进行消费或者子View的数量为零,事件将由ViewGroup自己处理,处理流程和View的处理流程一致

    76930

    Android事件分发机制 源码级

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

    69920

    解析Android点击事件分发机制

    运行的环境 所有的源码都基于API 26,也就是Android8.0奥利奥,Android Studio 3.0.1,想要自己敲代码试试的同学可以参考一下 进入正题 分析点击事件分发流程,是想弄明白当我们用手指去点击屏幕的时候...这里有个需要注意的地方就是Android的控件有些是默认可以点击的(如Button),还有一些是默认不可点击的(如TextView)他们的分发是有一些不同的,这里我们先看不可点击的,新建一个类继承android.support.v7...默认可点击控件的事件分发 比如Button这种默认可以点击的控件,或者设置android:clickable=”true”的控件,在分发流程中有一些不同,主要是onTouchEvent的默认方法不同,它直接消耗点击事件...可点击View的事件分发流程 ?...结语 事件分发流程到此就结束了,目的已经达到了,找到了我们想要点击的那个按钮或者其他控件,总结下来就是从Activity经过ViewGroup然后到View依次分发,然后又从底向上确认自己是否消耗该事件

    1.1K10

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

    一、简介 或许你会问,“为什么我一定要知道View的事件分发机制?”。因为我们在实际开发的过程中,经常会遇到多层的View互相嵌套以后,对某一个View进行滑动的时候,特别不灵敏,甚至于没法滑动。...这种滑动冲突的解决需要我们清楚的掌握View的事件分发机制。那下面我们详细的讲解下View的整个事件机制。...Android将View的事件封装到MotionEvent这个类中,这也是监听touch事件中回调给我们的参数public boolean onTouchEvent(MotionEvent event)...,外层View想自己处理接下来的事件,就拦截了事件分发,此时内层View就会收到ACTION_CANCEL的事件。...二、详细分析View的分发事件 我们都知道,Android的View是树形结构的,所以当一个事件来临的时候一般是从根部分发下来的。

    92640

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

    Android 事件分发 系列文章目录 【Android 事件分发事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) ---- 文章目录 Android...事件分发 系列文章目录 前言 一、View 的事件传递机制 ( dispatchTouchEvent ) 二、触摸事件 与 点击事件 冲突处理 三、View 事件分发相关源码 前言 接上一篇博客 【Android...) ---- 在上一篇博客 【Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 三 ) 二、当前遍历的子组件的事件分发 章节 , 分析到 ViewGroup 的 dispatchTouchEvent

    2.1K10

    Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 三 )

    Android 事件分发 系列文章目录 【Android 事件分发事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发事件分发源码分析...( ViewGroup 事件传递机制 三 ) ---- 文章目录 Android 事件分发 系列文章目录 前言 一、获取子组件 二、当前遍历的子组件的事件分发 三、ViewGroup 事件分发相关源码...前言 接上一篇博客 【Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 二 ) , 继续分析 ViewGroup 的事件分发机制后续代码 ; 一、获取子组件 ----

    1K20
    领券