当前位置: 首页 > news >正文

android手势事件

与手势事件有关的方法

  1. dispatchTouchEvent():该方法将触摸事件分发给相应的视图或视图组。
  2. onInterceptTouchEvent():该方法用于判断是否需要拦截触摸事件,如果需要拦截,则返回 true,否则返回 false。
  3. onTouchEvent():该方法用于处理触摸事件,返回一个 boolean 类型的值,表示是否消费了该事件。

此外,与手势事件有关的常见方法还包括:

  • onTouch():在视图上触摸了屏幕时调用。
  • onLongPress():在视图上长按屏幕时调用。
  • onDoubleTap():在视图上双击屏幕时调用。
  • onSingleTapUp():在视图上单击屏幕并且手指抬起时调用。
  • onShowPress():在视图上按下屏幕并且没有松开时调用。
  • onDown():在视图上按下屏幕时调用。
  • onUp():在视图上抬起手指时调用。
  • onScroll():在视图上发生滚动时调用。
  • onFling():在视图上发生滑动时调用。

手势事件的分发流程可以描述如下:

  • 用户在屏幕上进行触摸操作,触摸事件被Android系统捕获。
  • Android系统首先将触摸事件传递给当前活动的窗口,即顶层的窗口。
  • 窗口会将触摸事件传递给当前显示的页面类(Activity、Fragment等)。
  • 页面类会根据触摸事件的类型,将其分发给相应的容器类或控件类。
  • 容器类(ViewGroup)会先接收到触摸事件,它会遍历其子视图,并将触摸事件传递给子视图,直到找到合适的控件类。
  • 控件类(Button、ImageView等)接收到触摸事件后,会根据事件类型进行相应的处理。如果控件类设置了触摸监听器(OnTouchListener),则会调用监听器中的回调方法。
  • 如果没有设置触摸监听器,控件类会判断是否实现了手势识别的接口(如OnGestureListener),如果实现了,则会调用相应的手势回调方法。
  • 如果触摸事件没有被任何控件类处理或消耗,那么事件将继续向上层传递,直到被处理或到达顶层窗口。
  • 如果触摸事件最终没有被处理,系统会执行默认的处理逻辑,例如滚动屏幕或执行点击操作。
  • 需要注意的是,触摸事件的分发流程是按照视图层次结构从上到下的顺序进行的,即从窗口到页面类、容器类和控件类。每个层次的组件都有机会处理触摸事件,

如果事件被处理或消耗,则不会继续向下传递。这样可以实现触摸事件的精确分发和响应。

手势方法的执行者

对于Android触摸事件中手势方法的执行者,可以将其进一步细分为页面类、容器类和控件类。

  1. 页面类(Activity、Fragment等):在Android应用中,页面类是最顶层的组件,负责显示用户界面和处理用户交互。页面类可以实现手势识别的接口,并通过重写相应的手势回调方法来处理手势事件。例如,可以在页面类中实现OnGestureListener接口,重写onFling()方法来处理滑动手势。
  2. 容器类(ViewGroup):容器类是用于包含和管理其他视图组件的容器。例如,LinearLayout、RelativeLayout等。容器类可以监听并处理手势事件,并传递给包含在其中的子视图或控件。在容器类中,可以实现OnTouchListener接口或重写onTouchEvent()方法来处理手势事件。只有容器类可以调用onInterceptTouchEvent方法
  3. 控件类(Button、ImageView等):控件类是Android中内置的UI组件,用于展示特定功能或接收用户输入。控件类可以设置监听器来处理手势事件,例如设置OnTouchListener接口或实现GestureDetector.OnGestureListener接口。通过将手势事件传递给控件类,可以实现对于具体控件的手势操作响应。

综上所述,页面类是顶层的组件,负责整个页面的显示和交互处理;容器类是用于包含和管理其他视图组件的容器,负责组织和布局;

控件类是用于展示特定功能或接收用户输入的UI组件,负责展示和响应用户的交互操作。通过理解它们的功能和作用,可以区分页面类、容器类和控件类。

对实际开发来说,把常见的几种手势流程的排列组合搞清楚

  • 页面类的手势处理,它dispatchTouchEvent方法必须返回super.dispatchTouchEvent,如果不分发,页面上的视图就无法处理手势,

至于页面类的onTouchEvent方法,基本没有什么作用。因为手势动作要由具体视图处理,页面直接处理手势没有什么意义。所以,页面类的手势处理可以不用关心,直接略过,

  • 控件类的手势处理。它的dispatchTouchEvent方法没有任何作用,因为控件下面没有子视图,无所谓分不分发。至于控件类的onTouchEvent方法,如果要进行手势处理,就需要自定义一个控件,

重写自定义类中的onTouchEvent方法;如果不想自定义控件,就直接调用控件对象的 setOnTouchListener方法,注册一个触摸监听器OnTouchListener,并实现该监听器的onTouch方法。

所以,控件类的手势处理只需关心onTouchEvent方法。

  • 容器类的手势处理。这才是真正要深入了解的地方。容器类的dispatchTouchEvent与 onlnterceptTouchEvent方法都能决定是否将手势交给子视图处理。为了避免手势响应冲突,

一般要重写dispatchTouchEvent或者onlnterceptTouchEvent方法。这两个方法的区别可以这么理解:前者是大领导,只管派发任务,不会自己做事情:后者是小领导,尽管有拦截的权利,

过也得自己做点事情,比如处理纠纷等。容器类的onTouchEvent方法近乎摆设,因为需要拦截的在前面已经拦截了,需要处理的在子视图中已经处理了。

经过上面的详细分析,常见的手势处理方法有下面3个:

  • 页面类的dispatchTouchEvent方法:控制事件的分发,决定把手势交给谁处理。
  • 容器类的onlnterceptTouchEvent方法:控制事件的拦截,决定是否要把手势交给子视图处理。
  • 控件类的onTouchEvent方法:进行手势事件的具体处理

在Android中,点击事件的传递顺序通常是按照以下顺序进行的:

  1. Activity:当用户点击一个应用程序的界面时,首先会触发该Activity的onTouchEvent()方法。
  2. Window:在Activity的onTouchEvent()方法中,会通过窗口管理系统(Window Manager)将触摸事件传递给当前窗口(Window)。当前窗口可以是Activity中的任意一个视图(View)。
  3. View:在窗口中,触摸事件会被传递给视图层次结构(View Hierarchy),从顶层视图开始,依次向下传递。每个视图都会根据自己的需要进行处理,例如,点击事件可能被传递给一个按钮(Button)或者文本框(TextView)等。
http://www.lryc.cn/news/129040.html

相关文章:

  • [网络安全学习篇01]:windowsxp、windows2003、windows7、windows2008系统部署(千峰网络安全视频笔记)
  • CANoe自动化工程的搭建
  • 第6章:支持向量机
  • ROS机器人启动move base时代价地图概率性无法加载的原因及解决方法
  • 快速上手PyCharm指南
  • 数字图像处理 - 图像处理结合机器学习的应用示例
  • Linux命令200例:zip和unzip用于压缩和解压文件(常用)
  • 通过 HttpClient 发送请求
  • 管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——假言——第二节 必要条件假言+第三节 特殊假言
  • 算法笔记:A*算法
  • postgresql 分类排名
  • TCP服务器实现—多进程版,多线程版,线程池版
  • Nginx 配置文件的完整指南 (二)
  • AI夏令营第三期 - 基于论文摘要的文本分类与关键词抽取挑战赛笔记
  • 使用qsqlmysql操作mysql提示Driver not loaded
  • Java云原生框架Quarkus初探
  • ElasticSearch相关概念
  • 微服务实战项目-学成在线-项目部署
  • 封装form表单
  • 程序员如何利用公网远程访问查询本地硬盘【内网穿透】
  • 算法|Day42 动态规划10
  • vmalert集成钉钉告警
  • 深入解析 MyBatis 中的 <foreach> 标签:优雅处理批量操作与动态 SQL
  • LeGO-Loam代码解析(二)--- Lego-LOAM的地面点分离、聚类、两步优化方法
  • 程序员如何利用公网打造低成本轻量化的搜索和下载平台【内网穿透】
  • 构建可远程访问的企业内部论坛
  • 2023河南萌新联赛第(六)场:河南理工大学-C 旅游
  • C语言 常用工具型API ----------strchr()
  • 建造者模式的理论与实现
  • 非计算机科班如何顺利转码进入计算机领域?