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

Android事件分发机制

image.png 原文链接:https://juejin.im/post/5eb3e0d6f265da7c002028cd 这次说下Android中的事件分发机制 从开始点击屏幕开始,就会产生从...当其他事件来的时候,要看当前viewgroup是否消费了事件,如果当前viewgroup已经消费了事件,没传到子view,那么mFirstTouchTarget字段就为空,所以就不会执行到后面的代码,就直接消费掉所有事件了...这就符合了之前的所说的一种机制: 某个view一旦开始拦截,那么后续事件就全部就给它处理了,也不会执行onInterceptTouchEvent方法了 但是,两个条件满足了一个,就能执行到onInterceptTouchEvent...事件分发的应用(requestDisallowInterceptTouchEvent) 那既然学会了事件分发机制,我们实际工作中会怎么应用呢?其实最常见的就是解决滑动冲突的问题。...至此,事件的分发机制也就说的差不多了。 文末 您的点赞收藏就是对我最大的鼓励! 欢迎关注我,分享Android干货,交流Android技术。

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

android viewgroup事件分发机制

今天给大家代码ViewGroup事件分发的源码解析~~凡是自定义ViewGroup实现各种滑动效果的,不可避免的会出现很多事件的冲突,对ViewGroup事件分发机制的了解,也有益于大家了解冲突产生的原因...;   import android.util.AttributeSet;   import android.util.Log;   import android.view.MotionEvent;  ...super.requestDisallowInterceptTouchEvent(disallowIntercept);       }   }   继承LinearLayout,然后复写了与事件分发机制有关的代码.../apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent...View的事件分发机制,当child.dispatchTouchEvent(ev)返回true,则为mMotionTarget=child;然后return true; ViewGroup的ACTION_DOWN

95060

图解 Android 事件分发机制

Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android...废话不多说,总结一句:事件分发机制很重要。...Android 事件分发流 关于Android 事件分发机制网上的博文很多,但是很多都是写个Demo然后贴一下输出的Log或者拿源码分析,然后一堆的注释和说明,如果用心的去看肯定是收获不少但是确实很难把整个流程说清和记住...return true),事件分发机制就像递归,return false 的意义就是递归停止然后开始回溯。...作者简介:Kelin,国内某知名互联网公司Android码农一枚,微博 :http://weibo.com/KelinHong GitHub:https://github.com/Kelin-Hong

1.3K90

Android事件处理机制

-基于回调的事件,这个还真以前没用过,然后就想着把android事件处理机制的知识点都整理一遍,嗯,就是这样的。...3.基于回调的事件 3.1回调机制与监听机制 如果说事件监听机制是一种委托的事件处理,那么回调机制则与之相反,对于基于事件的处理模型来说,事件源与事件监听器是统一的,或者说是事件监听器完全消失了...,当用户在UI组件上触发某个事件时,组建自己特定的方法将会负责处理事件 为了使回调方法机制类处理UI组件上发生的事件,开发者需要为该组件提供对应的事件处理方法,而java是一种静态语言,无法为某个对象动态的添加方法...,因此只能继续是用UI组件类,并通过重写该类的事件处理的方法来实现 为了处理回调机制事件处理,android为所有UI组件提供了一些事件处理的回调方法。...4.Handler消息传递机制 出于性能优化考虑,android的ui线程操作是不安全的,这意味者如果多个线程并发操作UI组件,可能导致线程安全问题,为了解决这个问题,android制定了一条简单的规则

82930

Android触摸事件传递机制

前言:在Android开发中,经常会遇到触摸事件冲突,比如ViewPager的轮播图跟Fragment的划动事件冲突,或者轮播图跟下拉事件冲突,自定义view的事件处理等,本文章将会详细介绍Activity...、View、ViewGroup三者的触摸事件传递机制,传递包括三个阶段:分发、拦截、消费。...本文章将会详细介绍Activity、View、ViewGroup三者的触摸事件传递机制,传递包括三个阶段:分发、拦截、消费。...二.触摸事件的传递阶段 1.分发(Dispatch) 在Android系统中所有的触摸事件都是由 dispatchTouchEvent 方法进行分发的。...dispatchTouchEvent 、OnInterceptTouchEvent 、OnTouchEvent View:拥有dispatchTouchEvent 、OnTouchEvent 三、View的事件传递机制

1.1K10

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.1K60

Android Touch事件传递机制

简介:   Touch事件的传递机制与生活贴近,从父布局开始一步一步的向下分发事件。分发事件时调用boolean dispatchTouchEvent(MotionEvent ev);方法。...Touch事件传递拥有记忆功能,处理了一次事件传递,假定底层布局都没发完成事件,最后是由顶层父布局自己处理的。那么,相同事件再次产生的时候,顶层布局就不会向下分配,而是自己直接处理事件。...总结:   可以看出这个公司的小例子正好对应了Touch事件传递机制。一层一层往下传递,当下面无法完成时,又网上回传。...点击蓝色区域,那么应该发生的传递机制为任务一级一级的传下来,TextView(实习生)之后,任务被完成了。当再遇到相同的任务时,任务还是会被一级一级的传下来,最后由TextView(实习生)解决。...这里体现出了Touch时间传递机制的记忆性。 ?   此图是点击蓝色区域后log打印出的信息,值得注意的是,当FrameLayout按照传递的记忆性直接执行完成任务时,是不会触发拦截方法的。 ?

1.2K30

Android事件分发机制详解

事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_UP等 2、...,触发的第一个方法 2、onInterceptTouchEvent,决定是否拦截事件: 3、如果拦截事件,调用当前控件的onTouchEvent方法, 4、如果不拦截,判断是否有子控件, 5、onTouchEvent...,决定是否消费事件,消费返回True,不消费返回False。...如果返回的为false,之后的事件都不会再传递到当前的控件了(会不再访问当前控件),如果返回true,之后的事件依然还是会传递过来的。...三、各个方法和控件之间事件传递关系 事件传递流程:事件—>Activity—>Window—>DecorView—>ViewTree(嵌套在一起的各种控件) 一个事件,首先会由Activity的dispatchTouchEvent

64040

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事件传递机制之前有必要先看下源码的一些关系,如下是几个继承关系图: 怎么样?

61420

Android View的事件分发机制

触摸事件 在用户触摸屏幕时,总是离用户触摸点最近的控件来响应触摸事件,如果最近的控件没有实现响应事件,那这个事件会不断的向父类传递,直到有view响应时,就会将触摸反馈的事件流传递给这个view的onTouchEvent...Android 自定义触摸反馈事件时,通常都是如下的写法: public class MyView { // ......2.触摸反馈事件流是以ACTION_DOWN开始,以ACTION_UP或者ACTION_CANCEL结束的一组事件,例如: 按钮点击事件的触摸反馈事件流 ACTION_DOWN -> ACTION_MOVE...结果: 产生点击事件事件流是这样的: 原因: Button是离用户触摸点最近的控件,并且消费了本次的事件流。...这是因为Listview在onInterceptEvent()中判断出本次是滑动事件,从而拦截了本次事件流,来让自己处理本次事件流。

33610

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

65030

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

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

49410

Android事件分发机制 源码级

d16t |-- 截断 onInterceptTouchEvent = o19t |-- 消费 onTouchEvent = o10t 2.事件分发机制的参与者与各自拥有的回调方法...(即0)触发了 d16t(即dispatchTouchEvent) 然后按下事件(即0)触发了 o10t( 即onTouchEvent) 抬起事件(即1)触发了 d16t(即dispatchTouchEvent...默认情况下由最顶层消费事件,这里只有让当ViewGroup消费事件事件就不会往下传递了 当ViewGroup消费事件.png ---->[FatherViewGroup#onTouchEvent...View,追踪了一下: addView(一参)-->addView(两参)-->addView(三参)-->addViewInner-->addInArray 小结: 总的来说源码看下来,感觉view事件分发机制也并不像我想像中的那么难...在自定义View中至多也就是ViewGroup+子View的触摸事件协调,Activity一般不参和 Activity的事件分发实质上是DecorView的事件分发,所以都是View家的,Activity

68620

解析Android点击事件分发机制

运行的环境 所有的源码都基于API 26,也就是Android8.0奥利奥,Android Studio 3.0.1,想要自己敲代码试试的同学可以参考一下 进入正题 分析点击事件分发流程,是想弄明白当我们用手指去点击屏幕的时候...搭建最简单的结构 新建Activity,重写dispatchTouchEvent和onTouchEvent,前面的方法负责点击事件的分发,后面的方法负责点击事件的消耗,然后打印三种触摸事件的触发 private...这里有个需要注意的地方就是Android的控件有些是默认可以点击的(如Button),还有一些是默认不可点击的(如TextView)他们的分发是有一些不同的,这里我们先看不可点击的,新建一个类继承android.support.v7...默认可点击控件的事件分发 比如Button这种默认可以点击的控件,或者设置android:clickable=”true”的控件,在分发流程中有一些不同,主要是onTouchEvent的默认方法不同,它直接消耗点击事件...可点击View的事件分发流程 ?

1.1K10
领券