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

android view事件分发机制

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

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

    Android View事件分发机制

    触摸事件 在用户触摸屏幕时,总是离用户触摸点最近的控件来响应触摸事件,如果最近的控件没有实现响应事件,那这个事件会不断的向父类传递,直到有view响应时,就会将触摸反馈的事件流传递给这个view的onTouchEvent...结果: 产生点击事件事件流是这样的: 原因: Button是离用户触摸点最近的控件,并且消费了本次的事件流。...tips: 1. onTouchEvent() 函数中只有ACTION_DOWN时返回true才是有效的,若ACTION_DOWN没有返回true,那么后续的事件流也就不会再进来了,和这个view也就无缘了...,从而来开始拦截 阻止上级事件拦截 现在有如下这样的一种场景: 在一个类似Listview的支持滚动的自定义View中, View中有个Button,Button中的实现 重写了onTouchEvent...结果: 不会触发View滑动,而是Button在移动 这次为什么View中的onInterceptEvent()没有拦截到移动的事件流呢?

    35110

    View事件分发机制源码解析

    Header Android View 事件分发的机制可以说是 Android 开发者必知点之一,一般在面试的过程中肯定也有涉及。...虽然很早之前也写了一篇关于事件分发的博客《Android onTouch事件传递机制解析》,但是在这篇中分析不够全面,Activity 和 ViewGroup 没有涉及到。那么就来“再续前缘”吧。...因为最后的 View 部分在之前已经分析过了(也就是《Android onTouch事件传递机制解析》),所以今天的内容里关于 View 部分的就不再讲了,大家可以自己去这篇博客中接着看下去。...View View 部分的事件分发就参考一下《Android onTouch事件传递机制解析》,这里面讲的还是挺清楚的,很早以前写的,不多讲了。...Footer 今天的内容都讲的差不多了,也把事件分发的机制又整理了一遍。

    36740

    View事件拦截机制浅析

    为什么要去分析view事件 记得上周刚立的flag就是关于view事件机制。那现在我来说说我对view的感受。关于view事件,百度google一搜。一批又一批。但是能让人理解的少之又少。...View的结构 想要了解view事件,他的结构我们是需要知道的,我们先放一张view的结构图。然后根据图来一步步分析: ? 最顶层的PhoneWindow是什么呢?...View最为事件传递的最末端,要么消费掉事件,要么不处理进行回传,根本没必要进行事件拦截。...如果事件能够传递到当前view。那么此方法一定会调用,返回结果受当前View的ontouch和下级的dispatchtouchevent影响,表示是否消耗当前事件。...参考文献 《Android群英传》 事件分发机制原理

    61760

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

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

    2K10

    View,ViewGroup的Touch事件的分发机制

    ViewGroup的事件分发机制 我们用手指去触摸Android手机屏幕,就会产生一个触摸事件,但是这个触摸事件在底层是怎么分发的呢?...()方法在将上面的继续下去 View的Touch事件分发机制 我们还是先看View的dispatchTouchEvent()方法的源码 public boolean dispatchTouchEvent...是一直消费touch事件的,所以才会执行到onClick()方法 对于View的Touch事件的分发机制算是告一段落了,从上面我们可以得出TextView的dispatchTouchEvent()的返回...           }   return super.onInterceptTouchEvent(ev);       }   }   这篇文章的篇幅有点长,如果你想了解Touch事件的分发机制...的View会永远消费Touch事件,不管他是enabled还是disabled的 3.View的长按事件是在ACTION_DOWN中执行,要想执行长按事件View必须是longClickable的,

    1.2K70

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

    就算你不自定义控件,你也必须要了解Android控件的触摸屏事件传递机制(之所以说触摸屏是因为该系列以触摸屏的事件机制分析为主,对于类似TV设备等的物理事件机制的分析雷同但有区别。...分析Android View事件传递机制之前有必要先看下源码的一些关系,如下是几个继承关系图: 怎么样?...这里通过继承关系是说明一切控件都是View,同时View与ViewGroup又存在一些区别,所以该模块才只单单先分析View触摸屏事件传递机制。...到此上面例子中关于Button点击的各种打印的真实原因都找到了可靠的证据,也就是说View的触摸屏事件传递机制其实也就这么回事。...综合得出Android View的触摸屏事件传递机制有如下特征: 触摸控件(View)首先执行dispatchTouchEvent方法。

    62720

    Android中单个View的触摸事件分发机制

    对于view的触摸事件有三个动作: ACTION_DOWN:按下 ACTION_MOVE:移动 ACTION_UP:弹起 对于一个view,有touch事件,drag事件,click事件,所涉及到的listener...view的listener中,不会去执行任何操作,也就是触摸事件到这里就截止了,不会再往下传。...如果返回false,则事件就会被分发到view。...在事件进行分发时,首先判断点击的位置是否处于view的范围,如果不属于会执行onTouchEvent方法,如果属于然后再分发到view。...activity首先将事件分发到你所定义的最外层的view,在本程序中我只定义了一个view,所以当dispatchTouchEvent返回false进行事件分发时就理所当然的分发给了我所定义的view

    82620

    Android查缺补漏(View篇)--事件分发机制

    事件分发机制是Android中非常重要的一个知识点,同时也是难点,相信到目前为止很多Android开发者对事件分发机制并没有一个非常系统的认识,当然也包括博主个人在内。...可能在平时的开发工作中我们并没有意识到事件分发机制起到的作用,其实它是时刻存在的只是我们不知道而已,就像一些滑动冲突、点击事件之间的冲突等等大多是因为事件分发处理不当导致的。...什么是事件分发机制? 说了半天的事件分发机制那到底是个啥东西呢?...View上,这个传递的过程和规则就是事件分发机制。...首先会传递给Activity的dispatchTouchEvent(),在此方法内部会将由Window处理,接着事件会传递给根View,根View接收到事件后就会按照事件分发机制去处理事件

    63280

    一文读懂Android View事件分发机制

    1 前言 Android View 虽然不是四大组件,但其并不比四大组件的地位低。而View的核心知识点事件分发机制则是不少刚入门同学的拦路虎。...那么就让我们从浅入深,由表及里的去看事件分发机制,全方位,立体式,去弄懂这个神秘的事件分发机制吧。 ?...细心的同学一定发现了我们常用的按钮的onclick事件都是在ACTION_UP以后才被调用的。这和View事件分发机制是不是有某种不可告人的关系呢?! ?...通过上面的介绍相信我们已经初步了解了View事件分发的机制 ?...上面结论先简单的理解一下,通过下面的流程图,会更加清晰的帮助我们梳理事件分发机制 ? View结构图 ? View事件分发流程图 可以看出事件的传递过程都是从父View到子View

    35020

    开发笔记-自定义View(十)-View事件分发机制

    前言 关于自定义View系列的文章,好久没有写了。今天抽空看了下Android开发艺术探索。正好看到了View事件分发机制,所以将它写成笔记记录下来。...下面我们就一起来分析下Android的时间分发机制。 关于事件分发机制,其实网上的文章已经有很多了。我简单的看了几篇,发现写的都很好。...事件分发的核心方法 在对事件分发机制概念,以及结合平时我们经验总结出来的原理后。下面我们就来通过源码来去将我们的想法串联起来。不过在看源码之前,我们要先讲下在事件分发机制中三个至关重要的方法。...表示是否消耗当前事件 这三个方法就是事件分发机制中的核心三个方法,也是我们下面在源码中重要去分析的三个方法。...优秀干货 Android事件分发机制 Android事件分发机制详解:史上最全面、最易懂 《Android开发艺术探索》

    63720

    View事件分发

    NOTE: 笔记,碎片式内容 控件 App界面的开主要就是使用View,或者称为控件。View既绘制内容又响应输入,输入事件主要就是触摸事件。...对方法View.dispatchTouchEvent()的调用一方面传递事件view,其返回结果又表明了此view是否处理了事件。...NOTE: 一个View收到并处理某个触摸点的down事件后,那么即便之后触摸点移动到View之外,或在View的范围之外离开屏幕,此View也会收到相应的move、up事件,不过收到的事件中触摸点的...源码:View.dispatchTouchEvent View.dispatchTouchEvent()中不涉及事件传递,它只能自己处理事件。...补充 不要重写dispatchTouchEvent 可以看到,从View系统的设计原则上看,View和ViewGroup对dispatchTouchEvent()的不同实现形成了View事件的传递机制

    1.3K60

    View 事件分发

    无论是否设置setClickable为false 还是true都不可点击,无法响应事件....为false才可以不能点击,不响应事件,否则之前设置还是可以点击,但是设置false之后,但是还会产生一闪一闪变化        click.setClickable(false); View的dispatchTouchEvent...Defensive cleanup for new gesture         stopNestedScroll();     } //onFilterTouchEventForSecurity判断当前View...,只有前一个action返回为true时,后一个action才会触发 View事件分发面试问题 事件分发中的 onTouch 和 onTouchEvent 有什么区别,该如何使用 这两个方法都是在 View...onClick事件执行,onTouch在事件分发方法dispatchTouchEvent中调用,而onClick在事件处理方法onTouchEvent中被调用,onTouchEvent要后于dispatchTouchEvent

    62910

    View 事件分发机制,看这一篇就够了

    在 Android 开发当中,View事件分发机制是一块很重要的知识。不仅在开发当中经常需要用到,面试的时候也经常被问到。...目录大概如下: View 事件分发机制简介 View 常见滑动冲突解决 View 双击,多击事件是怎么实现的 手势识别 小结 View 事件分发机制简介 View 触摸事件 对于屏幕的点击,滑动,抬起等一系的动作...代码逻辑上是:上层判断之前交给ChildView的事件处理权需要收回来了,便会做事件的拦截处理,拦截时给ChildView发一个ACTION_CANCEL事件 几个主要方法 我们知道,View事件分发机制主要涉及到以下几个方法...以下内容参考图解 Android 事件分发机制这一篇博客 ?...主要是将 View事件分发机制,滑动冲突,以及开发当中经常用到的一些知识点,总结一下。

    72540

    Android查缺补漏(View篇)--事件分发机制源码分析

    在上一篇博文中分析了事件分发的流程及规则,本篇会从源码的角度更进一步理解事件分发机制的原理,如果对事件分发规则还不太清楚的童鞋,建议先看一下上一篇博文 《Android查缺补漏(View篇)--事件分发机制...篇)--事件分发机制》 中已经详细介绍了ViewGroup的dispatchTouchEvent对点击事件分发的流程,这里再通过源代码了解一下它的实现过程。...(其实也是ViewGroup)事件分发的分析,接下来再看看当事件传递给View时,View事件的处理代码。...View对点击事件的处理过程 从上面的分析我们可知,ViewGroup是通过调用View的dispatchTouchEvent方法将事件传递给View的,那么就来看一下View的dispatchTouchEvent...方法中,首先先判断了自身是否拦截事件,如果拦截那么事件不再向其子View传递,如果不拦截就会遍历其所有的子View找到可以适合接收事件的子View并调用子View的dispatchTouchEvent方法

    88170

    事件机制

    浏览器事件机制 DOM事件模型分为捕获和冒泡。一个事件发生后,会在子元素和父元素之间传播(propagation)。...是布尔值useCapture参数的情况下,默认值为false,表示注册事件是冒泡事件,为true时表示注册事件是捕获事件。...事件代理的处理方式有以下优点: 节省内存 不需要给子节点注销事件 React中的事件机制 React中的事件机制与原生的完全不同,时间没有绑定在原生DOM上,发出的事件也是对原生事件的包装。...React内部事件系统可以分为两个阶段:事件注册和事件触发。...React事件机制的优点: 减少内存消耗,提升性能,一种事件类型只在document上注册一次 统一规范,解决ie事件兼容问题,简化事件逻辑 对开发者友好

    80111

    Touch事件实现View拖动

    Touch监听事件可以监听手指在屏幕上的行为,例如按下、滑动。抬起。根据这些事件,可以做出View任意推动的效果。...注意: onTouch和onClick事件冲突问题:   当同时实现了Touch和Click事件时,会发生冲突,如何避免?在我们的onTouchListener的监听方法会返回一个boolean。...当它为false时,就会触发Click事件,当它为true时,便不会触发。我们希望在点击的时候触发点击事件,在拖动的时候实现移动效果的Touch事件。   ...这样做会出现很难触发点击事件。拖动事件太容易触发。所以我们需要加点限制。在ACTION_MOVE中我们获得X、Y移动的距离。那么我们判断当期中一个的移动距离大于1的时,才执行key=true。...正确的姿势是在touch时间或者click事件触发的时候调用。 View获取的位置的参照物是它的父控件:   对于view来说,他的上下左右位置参照物是它的父控件,无论父控件在屏幕的哪个位置。

    1.5K10
    领券