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

细说Android事件传递

一、View的dispatchTouchEvent和onTouchEvent 探讨Android事件传递机制前,明确android的两大基础控件类型:View和ViewGroup。...(3)MotionEvent.ACTION_UP       与down对应,表示抬起 另外,明确事件传递机制的最终目的都是为了触发执行View的点击监听和触摸监听: ******.setOnClickListener...对于View来说,事件传递机制有两个函数:dispatchTouchEvent负责分发事件,在dispatch***里又会调用onTouchEvent表示执行事件,或者说消费事件,结合源码分析其流程。...事件传递的入口是View的dispatchTouchEvent()函数:     /**      * Pass the touch screen...                Log.i(tag, "testLinelayout---onClick...");               }           });   不复写事件传递里的

1.4K100

Android触摸事件传递(上)

前言:智能手机早已成为我们今天身边必不可少的手持设备,iOS和Android也是目前主流的二大移动操作系统,当然也有越来越多的开发者加入到移动开发的工作中来。...我也是一名普通的Android码农,目前也在学习iOS开发中,有一些成长道路上的一些经验和教训,很早就想动手记录下来,再三下决心,终鼓起勇气,敲起键盘,有了下文,初次行文,文笔未免羞涩,大神轻点喷~    ...在Android中,系统将触摸事件包装成MotionEvent对象,同时MotionEvent类内部定义了ACTION_DOWN, ACTION_UP, ACTION_MOVE,ACTION_CANCEL...所以如果所有布局的都没有消费此触摸事件ev,就会执行第三步 ,调用Activity的onTouchEvent()方法,否则此触摸事件ev在App层传递结束。    ...这也验证了我们关于View触摸事件传递的第二部分,触摸事件ev优先被onTouchListener消费,然后再让传递给onTouchEvent消费。

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

    Android触摸事件传递(下)

    上一篇中,我说明了Android中Activity和View触摸事件的传递流程,现在我们来继续学习MotionEvent在View的容器ViewGroup中的传递过程。  ...ev向下传递给它的子View,换一句话说,这个时候,ViewGroup就变成了我们上一篇说的View,完全走View的触摸事件传递流程,同样的我们来写代码验证。  ...很明显,我们的按钮的触摸事件和它的父容器的触摸事件,都触发了,这是因为,我们EventBtn的onTouchListener方法和onTouchEvent方法都返回false,没有消费触摸事件,事件会向上继续传递...那么如果ViewGroup不拦截触摸事件,事件在它的子Views中又是如何传递的呢?    ...关于Android中ViewGroup的触摸事件传递就介绍到这里,难免很多地方有错误纰漏,但是我能够坚持把这些写出来,我觉得我已经有一点小小的提高了,很开心~~

    1.1K10

    Android Touch事件传递机制

    简介:   Touch事件的传递机制与生活贴近,从父布局开始一步一步的向下分发事件。分发事件时调用boolean dispatchTouchEvent(MotionEvent ev);方法。...Touch事件传递拥有记忆功能,处理了一次事件传递,假定底层布局都没发完成事件,最后是由顶层父布局自己处理的。那么,相同事件再次产生的时候,顶层布局就不会向下分配,而是自己直接处理事件。...总结:   可以看出这个公司的小例子正好对应了Touch事件传递机制。一层一层往下传递,当下面无法完成时,又网上回传。...而当同样事件出现时,同样展现了他的记忆功能,不需要往下传递做重复的事情,直接由上次做了这个事件的人直接处理。...而手指抬起时再次发生了Touch事件,任然传递至TextView被解决。 ?

    1.2K30

    Android TouchEvent事件传递机制

    ViewGroup类中的源码实现就是{return false;}表示不拦截该事件, 事件将向下传递(传递给其子View); 若手动重写该方法,使其返回true则表示拦截,事件将终止向下传递,...返回true则表示该View能处理该事件,事件将终止向上传递(传递给其父View); 返回false表示不能处理,则把事件传递给其父View的onTouchEvent()方法来处理 先上一段代码演示...3.演示图片中第二份为什么会少了一个onInterceptTouchEvent调用 dispatchTouchEvent()方法中还有“记忆”的功能,如果第一次事件向下传递到某View,它把事件继续传递交给它的子...,那么这次的事件就继续交给下面的来处理,若上次的事件没有被下面的处理成功,那么这次的事件就不会向下传递了,该View直接调用自己的onTouchEvent()方法来处理该事件。...在下一次发生ACTION_DOWN事件的时候,还是会传递到该View的。

    36920

    Android webkit keyevent 事件传递过程

    前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题。所以索性研究了一下keyevent 事件的传递流程。...frameworks 层 keyevent 事件开始是从/frameworks/base/core/java/android/webkit 目录下WebViewClassic.java 中onKeyDown...其它key事件调用 sendKeyEvent(event),在sendKeyEvent() 函数中又调用 sendBatchableInputMessage()函数在这个函数中的又调用 mWebViewCore.sendMessage...(message) 将event封装成Message传递给WebViewCore.java中的EventHub 类 在sendMessage()函数又通过它发送到Handler在transferMessages...break; webkit层 key中调用nativeKey() 将事件传入webkit中Source/WebKit/android/jni WebViewCore.cpp中的 { "nativeKey

    1.4K100

    Android onTouch事件传递机制解析

    记得刚开始学习Android的时候,对于onTouch相关的事件一头雾水。...分不清onTouch(),onTouchEvent()和OnClick()之间的关系和先后顺序,觉得有必要搞清onTouch事件传递的原理。...经过一段时间的琢磨以及网上相关博客的介绍,总算是了解了触摸事件传递的机制了,顺便写一篇博客来记录一下。下面就让我们来看看吧。 大家都知道一般我们使用的UI控件都是继承自共同的父类——View。...到了这里onTouch事件的传递机制基本已经分析完成了,也算是告一段落了。...下面是我画的一张草图: 触摸事件传递机制原理图 还有一点值得注意的地方是:假如当前事件是ACTION_DOWN,只有dispatchTouchEvent返回true了之后该View才会接收到接下来的ACTION_MOVE

    79840

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

    Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) ---- 文章目录 Android...) ---- 在上一篇博客 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 三 ) 二、当前遍历的子组件的事件分发 章节 , 分析到 ViewGroup 的 dispatchTouchEvent

    2.1K10

    【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )

    Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) ---- 文章目录...Android 事件分发 系列文章目录 一、事件分发脉络 二、驱动层通过中断传递事件 三、WindowManagerService 向 View 传递事件 一、事件分发脉络 ---- 事件分发分析流程...( 简称 WMS ) 将事件传递到 View 层 ; ③ View 层内部 : 事件在 View 的容器及下层容器 / 组件 之间传递 ; 二、驱动层通过中断传递事件 ---- 硬件产生事件后 , 驱动层通过中断传递事件...; 三、WindowManagerService 向 View 传递事件 ---- 在 【Android 应用开发】UI绘制流程 ( 生命周期机制 | 布局加载机制 | UI 绘制流程 | 布局测量...各个窗口的层级如下 : 事件传递从 Activity 逐层向下传递的 View 组件上 ; 这里开始从 ViewRootImpl 的 setView 方法进行分析 ; 通过 new InputChannel

    1.2K20

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

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

    1K20

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

    Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) 【Android 事件分发】事件分发源码分析...【Android 事件分发】事件分发源码分析 ( View 事件传递机制 ) , 继续分析 ViewGroup 的事件分发机制后续代码 ; Activity 事件传递 , 最终调用到了 ViewGroup

    1.5K30

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

    Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) ---- 文章目录 Android 事件分发 系列文章目录 前言 一、无障碍调用 二、判定是否首次按下 三、判定是否拦截 四、判定是否取消操作...五、ViewGroup 事件分发相关源码 前言 在上一篇博客 【Android 事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow..., 没有进行具体的事件拦截 ; 是否进行拦截 , 赋值给了 intercepted 局部变量 , 该值决定是否进行拦截传递的事件 ; ViewGroup | dispatchTouchEvent 方法相关源码

    45720

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

    Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) ---- 文章目录 Android 事件分发...事件传递机制 一 ) , 继续分析 ViewGroup 的事件分发机制后续代码 ; 一、获取触摸索引值 ---- 首先在 动作事件不是取消操作 , 且不拦截事件 , 的前提下 , 才能执行后续操作 ,...; 获取当前所有组件的子组件的 Z 轴的深度 , 按照 Z 轴深度进行排序 , Z 轴方向上 , 对于事件传递 , 上面的组件优先级高于被覆盖的下面的组件优先级 ; 下面的代码是组件遍历排序的核心逻辑

    48840

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

    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

    1.2K20

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

    Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发...】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 三 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 ) 【Android 事件分发】事件分发源码分析...( ViewGroup 事件传递机制 五 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 六 ) ---- 文章目录 Android 事件分发 系列文章目录

    1.2K20

    Android触摸事件_简述兴奋在突触的传递过程

    因此就需要对Android消息传递机制有一个基本的理解与认识,这样才有可能解决开发过程中的需求与问题。...在Android中,所有的事件都是从开始经过传递到完成事件的消费,这些方法的返回值就决定了某一事件是否是继续往下传,还是被拦截了,或是被消费了。...二、实验测试 测试的时候,分为以下几种情况,不同的情况下事件的传递机制是不一样的,但是事件传递原理都一样,所以不要混淆。...,事件是通过层级传递的,一次事件传递对应一个完整的层级关系。事件传递是从ViewGroup传递到View的,而不是反过来传递的。...2) 事件传递的两种方式: 隧道方式:从根元素依次往下传递直到最内层子元素或在中间某一元素中由于某一条件停止传递。

    71820

    Android输入系统的事件传递流程和IMS的诞生

    前言 很多同学可能会认为输入系统是不是和View的事件分发有些关联,确实是有些关联,只不过View事件分发只能算是输入系统事件传递的一部分。...输入事件传递流程的组成部分 输入系统是外界与Android设备交互的基础,仅凭输入系统是无法完成输入事件传递的,因此需要输入系统和Android系统的其他成员来共同完成事件传递。...输入系统事件传递需要经过以下几个部分。 ? 输入事件传递流程可以大致的分为三个部分,分别是输入系统部分、WMS处理部分和View处理部分。下面分别对这几个部分进行简单的介绍。...输入事件所产生的原始信息会被Linux内核中的输入子系统采集,原始信息由Kernel space的驱动层一直传递到User space的设备节点。...IMS的诞生 输入事件传递流程的组成部分我们已经了解了,本系列主要讲解输入系统部分中IMS对输入事件的处理,在这之前我们需要了解IMS的诞生。

    1.8K20

    Android点击视图外部,隐藏键盘 及 事件传递机制

    } return super.dispatchTouchEvent( event ); } 有时候 我们在Activity中添加onTouchEvent方法 然后点击视图 但是就是不触发事件...这是为什么呢 这就要说一下Android的事件机制了 事件机制 Android和事件有关的方法有三个 dispatchTouchEvent 接受上级消息 onInterceptTouchEvent...决策向下级分发还是自身处理 onTouchEvent 自身处理逻辑 Android的分发逻辑和处理逻辑是相反的 dispatchTouchEvent –> 分发是从父View到子View 处理是从子...(默认返回值是true) 如果返回值:false 不接受动作序列中的后续事件 2) onInterceptTouchEvent(默认返回值是false) 如果返回值:true 就不再向子View分发...如果BView的onTouchEvent返回false 那么AView的onTouchEvent也会触发 如果BView的onTouchEvent返回true 那么AView的onTouchEvent

    1.5K10

    【Android 事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )

    Android 事件分发 系列文章目录 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android...事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) ---- 文章目录 Android...事件分发 系列文章目录 一、Activity 的事件传递 二、PhoneWindow 事件传递 三、DecorView 事件传递 四、ViewGroup 事件传递 一、Activity 的事件传递 -...--- 手指触摸到 Android 手机屏幕时 , 先由硬件驱动层产生事件 , 然后传递到 Framework 层 , 之后传递到 AMS , 最后到 Activity 界面中 ; 在 Activity.../app/Activity.java 二、PhoneWindow 事件传递 ---- 在上述 Activity 的 dispatchTouchEvent 方法中 , 调用了 PhoneWindow 的

    91620
    领券