`
ericbaner
  • 浏览: 174335 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android的UI事件流机制

 
阅读更多

android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 


一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP


当屏幕中包含一个ViewGroup,而这个ViewGroup又包含一个子view,

这个时候android系统如何处理Touch事件呢?到底是ViewGroup来处理Touch事件,还是子view来处理Touch事件呢?我只能很肯定的对你说不一定。呵呵,为什么呢?看看下面我的调查结果你就明白了。


android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent

当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由  dispatchTouchEvent 方法进行分发,

如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,

如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,

如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,

如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。

 

可以总结为: 当一个touch事件发生时,最上层视图窗口来往下层分发,每层都有可以拦截的机制,一直传到最底层的UI控件 。

 

如果一个MotionEvent.ACTION_DOWN事件传递到最底一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递给父ViewGroup,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件如MotionEvent.ACTION_MOVE 或 MotionEvent.ACTION_UP。

 

 

分享到:
评论

相关推荐

    计算机毕业设计 - Android瀑布流实现,类似于蘑菇街和迷尚 应用里的排列,保证可靠运行,计算机毕业生可参考,免费资源下载

    Android瀑布流实现,本项目旨在开发一个类似于蘑菇街和迷尚等应用中常见的瀑布流布局排列的Android应用程序。瀑布流布局以其独特的排列方式,能够有效地展示大量图片信息,同时为用户带来良好的浏览体验。 在本项目...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    疯狂Android讲义源码

     3.1 Android的事件处理 145  3.2 基于监听的事件处理 145  3.2.1 事件监听的处理模型 145  3.2.2 事件和事件监听器 148  3.2.3 内部类作为事件监听器类 151  3.2.4 外部类作为事件监听器类 152  3.2.5 ...

    Android高级编程--源代码

    4.1 Android UI基本设计 74 4.2 View简介 74 4.2.1 使用View创建Activity(活动)用户界面 75 4.2.2 Android Widget工具箱 76 4.3 布局简介 77 4.4 创建新的View 78 4.4.1 修改现有的View 79 4.4.2 创建复合...

    移动互联网应用开发-Android网络编程基础实验.pdf

    线程是 Android 中的执行流的最小单元,Android 首先会开启一个主线程 ( 也就是 UI 线程 ) ,主线程为管理界面中的 UI 控件,进行事件分发。 三、Handler 消息处理 Handler 是主要接受子线程发送的数据,并用此...

    Android 4游戏编程入门经典

     4.2.7 音乐流  4.2.8 基本图形编程  4.3 最佳实践  4.4 小结 第5章 android游戏开发框架  5.1 制定计划  5.2 androidfileio类  5.3 androidaudio、androidsound和androidmusic  5.4 androidinput和...

    基于Android的日程管理软件开发.pdf

    * 用户界面:使用XML布局、Java或Kotlin语言设计用户界面的UI组件。 * 业务逻辑:使用Java或Kotlin语言实现日程管理软件的业务逻辑,例如日程的添加、删除、修改等。 3. Android日程管理软件开发关键技术 基于...

    深入理解Android:卷I--详细书签版

    8.2.2 Activity的UI绘制 294 8.2.3 关于Activity的总结 296 8.3 初识Surface 297 8.3.1 和Surface有关的流程总结 297 8.3.2 Surface之乾坤大挪移 298 8.3.3 乾坤大挪移的JNI层分析 303 8.3.4 Surface和画图 ...

    Android中使用TextureView播放视频

    如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的SurfaceView或者TextureView做到。 1).TextureView的兄弟SurfaceView 应用程序的视频或者opengl内容往往是显示在一个特别的...

    android游戏编程入门

     4.2.7 音乐流 119  4.2.8 基本图形编程 122  4.3 最佳实践 143  4.4 小结 144  第5章 Android游戏开发框架 145  5.1 制定计划 145  5.2 AndroidFileIO类 146  5.3 AndroidAudio、AndroidSound  和Android...

    Android-Universal-Image-Loader源码和jar包

    Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。 Android开发中我们会经常遇到图片过多或操作不当造成OOM异常,有时虽然是解决了这个...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    1.3.3页面自适应机制,即设备自适应与浏览器自适应机制 8 1.3.4 “认我测”质检服务平台的设计和实现 8 1.4 本文的结构安排 8 第二章 多窗口类浏览器设计 11 2.1 多窗口类浏览器需求分析 11 2.1.1 Activity简介 11 ...

    Android课程设计,Kotlin实现网络图片下载应用

    根据Android多线程和网络编程的知识讲解和案例使用,使用Handler消息机制实现网络图片下载,并且保存到模拟器中,强化对Android多线程编程、网络编程和文件读写的理解。要求: 1. 巩固Android Studio的常规用法; 2....

    分析Android App中内置换肤功能的实现方式

    Android平台api没有特意为换肤提供一套简便的机制,这可能是外国的软件更注重功能和易用,不流行换肤。系统不提供直接支持,只能自行研究。 换肤,可以认为是动态替换资源(文字、颜色、字体大小、图片、布局文件...

    安卓android课程设计分析报告.doc

    安卓android课程设计分析报告 湘潭大学课程设计报告 课程名称______手机安卓开发_______ 课题名称______天气预报APP__... Ui界面 我们的ui界面秉承着清新的风格开发出来的。 整个软件界面使用一个

    笔试面试知识整理.pdf

    * RunLoop:iOS系统中的事件循环机制,负责处理用户界面事件和系统事件 * Cocoa Touch:iOS系统中的应用程序框架,提供了大量的UI控件和API * UIView和UIViewController:iOS系统中的视图和视图控制器,负责显示和...

    [个人毕业设计项目]-基于Flutter的聊天社交应用

    - 安装Flutter SDK和相关的开发工具,例如Android Studio或VS Code。 - 设置Flutter开发环境,包括模拟器或真实设备。 3. **设计UI/UX**: - 使用Flutter的Widget来设计用户界面。 - 考虑使用一些流行的UI库,...

    D-KMP-sample:D-KMP官方样本

    适用于Android的JetpackCompose和适用于iOS的SwiftUI 它通过Kotlin MultiPlatform完全共享ViewModel (和DataLayer ) 它为UI层提供了两种类型的函数:事件函数和StateProvider函数它实现了MVI模式和单向数据流它...

    unity2d 游戏开发资源 unity2d 游戏开发资源

    221 12.2 关卡控制机制 224 任务机制 224 场景机制 230 顾客机制 235 第13章 手机游戏上架发布教程 13.1 Android 发布应用的教程 242 Android 环境设置 242 发布 APK 245 发布设置 247 13.2 Unity Remote 4 使用的...

Global site tag (gtag.js) - Google Analytics