Andorid事件传递过程

一个好的应用与用户的体验分不开,用户体验好就是对事件的处理适当.要处理好Android事件处理,就必须了解Android中事件的传递过程.下面是我对Andorid事件的理解,如果有不对地方,请给我指出来!

Android页面由2个元素组成,一个是Activity,另一个是View.而事件产生于页面,所以来了解一下事件是怎么样在View与Activity中传递的.

  1. 事件首先由系统传递到View,如果View不处理再传递到Activity,而Activity中接收的方法是onTouchEvent(MotionEvent ev);
在View中涉及三个方与事件传递
  1. dispatchTouchEvent(MotionEvent ev);  对事件进行分发
  2. onInterceptTouchEvent(MotionEvent ev);对事件进行拦截
  3. onTouchEvent(MotionEvent ev);对事件进行处理
那么事件是怎么在View中传递的呢?
  1. 从顶层向底层传递
  2. 先到方法1,再到方法2,最后到方法3
而具体传递与三个方法返回值有关.
一,dispatchTouchEvent(MotionEvent ev)
  1. 这个方法必须调用super.dispatchTouchEvent(MotionEvenet ev);如果不调用则所有事件都不会继续向下传递.此时如果返回true,则所有事件都只会传递到这个方法后停止传递.如果返回false,则所有事件都只传递到这个View中方法3
  2. 如果返回true,则交给这个View的onTouchEvent处理.
  3. 如果返回false,第一次交给onInterceptTouchEvent处理,看是否拦截.
二,onInterceptTouchEvent(MotionEvent ev),这个方法只调用一次,就是事件第一次传递来的时候,其它的事件如ACTION_MOVE,ACTION_CANCEL等都不会进入此方法;
  1. 如果返回true,则事件直接进入onTouchEvent方法,表示这个事件已经拦截,这个事件以后的所有action都会直接进入到onTouchEvent方法中.
  2. 如果返回false,则事件会进入到下层的View中
三,onTouchEvent(MotionEvent ev)
  1. 如果返回true,表明这个事件已经被处理,这个事件就在这里停止,不会继续传递了.
  2. 如果返回false,表明这个View没有处理这个事件,这个事件会继续传递,传递到上层View的onTouchEvent中,如果View一直没有处理,则最后传递到Activity中.

注意:

  1. dispitch是事件分发,返回true,则表示事件已经分发,false表明不分发事件.
  2. intercept是事件的拦截,返回true,表示事件已经拦截,false表明不拦截事件,事件继续向下传
  3. onTouch是事件的处理,返回true,表示事件已经处理,等待事件的后续action,返回false,表示不处理事件,事件继续传递.
  4. 一旦事件到o,则事件的后续动作(action)直接进入到12车道,因此我将12道称作为快车道.

事件产生时,系统经过1路径进入到View,因此路径1是出发站.

  • 事件经过1到达a_a,如果a_a直接(不调用super.dispatchTouchEvent)返回true,则表示事件已经分发,但是并没有真正分发下去,只是a_a自己处理了,所有后继的所有事件都只到达a_a.a如果a_a直接返回false,表示事件不分发,此是事件进入到15,此时事件到达了o,后续事件进入会进入12.如果不是直接返回false,则会进入到车道2,这是正常的事件处理过程.因此a_a点一定要调用super.dispatchTouchEvent进行事件的真正的分发.
  • 事件到达a_b,是询问对事件是否进行拦截.如果返回true,表示要进行拦截,进入到车道3到达a_c.a_c不进入到o点情况下,此时后继事件进入到了车道13,a_b点返回false,表示不拦截事件.则进入到车道5到达b_a.
  • b_a点返回false,表示不拦截事件,则进入到14道到达a_c.后续的事件就会进入到13车道直接到达a_c.返回直接返回true,则所有事件都会在这里,所有action都会走1-2-3-5.调用了super.dispatchTouchEvent返回true,则会进入6道到达b_b.
  • 到达b_b,如果返回true,则进行拦截,进入到7道到达b_c.b_c返回false,到达a_c,如果a_c返回true后续事件进入到13.返回false事件进入11到达o,后续事件进入12.b_c返回true,表示事件已经被处理掉了,此时后续事件进入到了1-2-3-5-15.不会进入到b_b.b_b返回false,则进入8道到达c_c.c_c点返回true,则事件被处理掉,后续事件会进入到1-2-3-5-6-8返回true,则进入到9道到达b_c.b_c返回true,则后续事件进入到1-2-35-15到达b_c.否则返回到a_c,a_c点返回true,后续事件会进入到1-13到达a_c.如果a_c点返回false,则进入到o,此后事件会进行12车道.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值