以前写 android ,对事件的处理没有太深入,只是简单的 onTouchEvent 就 ok 了,现在写的 UI ,很多自定义组件,父 view 和子 view 都需要接收事件,然后处理。如果不弄明白它的事件传递机制,很难拥有好的用户体验。
Touchevent 中,返回值是 true ,则说明消耗掉了这个事件,返回值是 false ,则没有消耗掉,会继续传递下去,这个是最基本的。
在 View 中跟 Touch 相关的事件有 dispatchTouchEvent , interceptTouchEvnet , onTouchEvent 三种。 dispatchTouchEvent 是负责分发事件的,事件从 activity 传递出来之后,最先到达的就是最顶层 view 的 dispatchTouchEvent ,然后它进行分发,如果返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。
如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。(我说的一次事件指的是 down 到 up 之间的一系列事件)
注:上半部分为父View,下半部分为子View;
完整的传递流程为:父View->子View->子View的子View->……->子View的子View->子View->父View。
如果整个流程中都没有处理掉这个事件,即所有处理的返回值均为false,则不会再传递下一次事件,因为他会认为你这次的事件阻塞了,没必要给下一次。
onTouchEvent如果不消耗的话,会从子view传递到父view。
转自:http://chroya.iteye.com/blog/668297
- 大小: 36.2 KB
分享到:
相关推荐
自己测试通过小例子,STL格式的3D模型,在Android里面通过触摸旋转的例子
Android采用了一种基于事件驱动的单线程模型。当应用程序启动时,系统会自动创建一个主线程,通常称为UI线程或主线程,它负责处理所有与用户界面(UI)相关的事件,如按键、触摸屏事件以及屏幕绘制等。这意味着所有...
本文将深入探讨Android事件模型,特别是`onTouchEvent`和`interceptTouchEvent`的关系,帮助开发者更好地理解这两个方法如何协同工作以实现复杂的触摸事件处理。 首先,Android事件模型基于触摸事件的分发机制,它...
7. **触摸和手势控制**: Android提供了一系列的触摸事件监听器,如`OnTouchListener`,你可以利用这些接口响应用户的触摸操作,改变相机视角或模型的属性,实现3D交互。 8. **性能优化**: 移动设备的硬件资源有限,...
Android中展示Unity3D模型
总之,Android事件处理模型通过Input子系统实现了高效的事件分发,而多线程技术则保证了应用的流畅运行和用户体验。理解和掌握这些机制对于开发高质量的Android应用至关重要。开发者需要根据具体需求选择合适的事件...
Android通过opengl显示obj模型
基于yolov9 ncnn模型部署到android源码+模型+项目说明.zip基于yolov9 ncnn模型部署到android源码+模型+项目说明.zip基于yolov9 ncnn模型部署到android源码+模型+项目说明.zip基于yolov9 ncnn模型部署到android源码+...
在本文中,我们将深入探讨如何将YOLOv8模型集成到Android端的Demo应用程序中,以便实现图像识别功能。YOLO(You Only Look Once)是一种实时目标检测系统,以其高效和准确性而闻名。YOLOv8是YOLO系列的最新版本,它...
本文将深入探讨如何使用OpenGL在Android上绘制STL(立体光刻)3D模型,特别关注创建一个3D指南针效果。STL是一种广泛用于3D打印和计算机辅助设计(CAD)的文件格式,它包含了物体表面的三角形面片信息。 首先,我们...
在“Android游戏FBX文件(T54坦克模型)”中,我们看到的是一个专为Android平台设计的游戏资源,包含了T54坦克的3D模型,以及相关的贴图和动画数据。 1. **3D模型**:T54坦克模型是这个FBX文件的核心部分,它由多个...
部署yolov10的ncnn模型到android源码+模型+项目说明.zip 部署yolov10的ncnn模型到android源码+模型+项目说明.zip 部署yolov10的ncnn模型到android源码+模型+项目说明.zip 部署yolov10的ncnn模型到android源码+模型+...
在Android开发中,数据模型的传递是一个非常关键的环节,特别是在处理复杂的数据结构时。本文将探讨如何在Android应用程序中有效地传递和管理复杂数据模型,同时结合提供的标签"源码"和"工具",我们将深入解析相关的...
在Android平台上进行机器学习模型的部署是移动应用开发中的一个重要环节。MNN(Mobile Neural Network)是由阿里巴巴开源的轻量级、高性能的深度学习推理框架,适用于手机等嵌入式设备。本篇将深入探讨如何在Android...
本教程将深入探讨如何在Android环境中实现自定义的触控事件,即“发送模型基于安卓点触事件”。 一、Android触摸事件基础 Android的触摸事件主要由MotionEvent类表示,它包含了触摸屏幕的各种动作,如ACTION_DOWN...
Android开发基于MVVM模型设计的BeatBox程序源码Android开发基于MVVM模型设计的BeatBox程序源码Android开发基于MVVM模型设计的BeatBox程序源码Android开发基于MVVM模型设计的BeatBox程序源码Android开发基于MVVM模型...
在 Unity3D 中,Touch 事件是指用户在 Android 设备上的触摸屏幕时所产生的事件。Touch 事件可以用来控制游戏中的对象,例如移动、旋转、缩放等。Unity3D 提供了多种方式来处理 Touch 事件,包括使用 Input.GetTouch...
《Android-EasyShow3D:基于OpenGLES的3D模型展示框架详解》 在移动设备上实现3D模型的展示已经成为许多应用不可或缺的功能,尤其是在游戏、设计、教育等领域。Android-EasyShow3D就是这样一款专为Android平台设计...
7. **数据绑定**:转盘上的每个选项通常需要与数据模型绑定,可以通过数组、List或者其他数据结构存储,然后在 `onDraw()` 中根据数据动态绘制。 8. **响应式设计**:考虑到不同设备的屏幕尺寸,要确保转盘能够适配...