位置: 编程技术 - 正文

Android事件机制之一:事件传递和消费(android事件处理方式有几种)

编辑:rootadmin
关于Android中的事件机制,用到的地方还是很多的,并且这个知识点还真有点复杂。

推荐整理分享Android事件机制之一:事件传递和消费(android事件处理方式有几种),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android事件处理流程,android事件处理实验报告,android事件处理实验报告,android事件处理方式有几种,android事件处理的两种机制是什么?二者有何特点,android事件处理机制,android事件处理的两种机制是什么?二者有何特点,android事件处理的两种机制是什么?二者有何特点,内容如对您有帮助,希望把文章链接给更多的朋友!

在写这篇文章前,网上看了不少博文,有的写的感觉挺不错的。只是当时感觉好像理解了,事后又很容易忘。现在自己也系统整理下吧。

Android中的事件在表现形式上有很多,如onTach、onClick和onLongClick等,在具体微观上的表现形势有action_down、action_move和action_up等。

无论哪种事件表现类型,首先都是基于事件的传递模型。其实Android中的事件传递有点类&#;于JS中事件传递模型。都是基于先捕获然后冒泡的形式。

在捕获阶段,事件先由外部的View接收,然后传递给其内层的View,依次传递到更够接收此事件的最小View单元,完成事件捕获过程;

在冒泡阶段,事件则从事件源的最小View单元开始,依次向外冒泡,将事件对层传递。

事件的捕获和冒泡是整个事件的传递流程,但是在实际的传递过程中,Android中则表现的相对复杂。

主要表现在可以控制每层事件是否继续传递(由事件分发和事件拦截协同进行),以及事件的具体消费(由事件消响应进行,但需要注意的是,事件分发自身也具有事件消费能力)。

也就是本文提及的事件分发、拦截和响应。

Android中不同的控件所具有的事件分发、拦截和响应稍有不同,主要表现在Activity本身不具有事件拦截,不是ViewGroup的最小view单元不具有事件分发和事件拦截(因为它没有自己的子View)。

具体对应关系如下图所示:

对于控制Android中的事件传递和消费机制,最主要需要注意的就是这几个方法的返回&#;了。

事件分发:public boolean dispatchTouchEvent(MotionEvent ev)

当有监听到事件时,首先由Activity的捕获到,进入事件分发处理流程。无论是Activity还是View,如前文所说,事件分发自身也具有消费能力,

如果事件分发返回true,表示改事件在本层不再进行分发且已经在事件分发自身中被消费了。至此,事件已经完结。如果你不想Activity中的任何控件具有任何的事件消费能力,

最简答的方法可以重写此Activity的dispatchTouchEvent方法,直接返回true就ok。

如果事件分发返回 false,表明事件在本层不再继续进行分发,并交由上层控件的onTouchEvent方法进行消费。

当然了,如果本层控件已经是Activity,那么事件将被系统消费或处理。

Android事件机制之一:事件传递和消费(android事件处理方式有几种)

如果事件分发返回系统默认的 super.dispatchTouchEvent(ev),事件将分发给本层的事件拦截onInterceptTouchEvent 方法进行处理

(如果本层控件是Activity,由于其没有事件拦截,因此将直接将事件传递到子View,并交给子View的事件分发进行处理)。

事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev)

如果 onInterceptTouchEvent 返回 true,则表示将事件进行拦截,并将拦截到的事件交由本层控件 的 onTouchEvent 进行处理;

如果返回结果是false;则表示不对事件进行拦截,事件得以成功分发到子View。并由子View的dispatchTouchEvent进行处理。

如果返回super.onInterceptTouchEvent(ev),事件默认不会被拦截,交由子View的dispatchTouchEvent进行处理。

事件响应:public boolean onTouchEvent(MotionEvent ev)

如果onTouchEvent返回true,表示onTouchEvent处理完事件后消费了此次事件。此时事件终结,将不会进行后续的冒泡。

如果onTouchEvent返回false,事件在onTouchEvent中处理后继续向上层View冒泡,且有上层View的onTouchEvent进行处理。

如果返回super.onTouchEvent(ev),则默认处理的逻辑和返回false时相同。

总结:从以上过程中可以看出,dispatchTouchEvent无论返回true还是false,事件都不再进行分发,

只有当其返回super.dispatchTouchEvent(ev),才表明其具有向下层分发的愿望,

但是是否能够分发成功,则需要经过事件拦截onInterceptTouchEvent的审核。事件是否具有冒泡特是由onTouchEvent的返回&#;决定的。

测试用例:

EventTest

---------------------------------------------------------------------------------笔者水平有限,若有错漏,欢迎指正,欢迎转载以及CV操作,但希注明出处,谢谢!

查看项目层级结构layout视图树-hierarchyviewer工具 查看项目的视图树和项目的view的层级结构有个sdk自带的工具:sdk-tools-hierarchyviewer工具双机打开后:选择自己的项目,点击LoadViewHierarchy:这样就能查看

Android事件机制之二:onTouch详解 《Android事件机制之一:事件传递和消费》一文总结了Android中的事件传递和消费机制。在其中对OntachEvent中的总结中,不是很具体。本文将主要对onTach进

文件读写 file.mkdirs()为啥总是返回false 今天碰到个坑爹问题,文件读写file.mkdirs()方法总是返回false。原以为是代码问题,后面调了半天才发现,原来是没有给sd卡读取权限!安卓sd卡权限没给

标签: android事件处理方式有几种

本文链接地址:https://www.jiuchutong.com/biancheng/383167.html 转载请保留说明!

上一篇:android SD卡剩余空间(手机sd卡满了怎么办)

下一篇:查看项目层级结构layout视图树-hierarchyviewer工具(查看项目层级结构怎么查)

  • 期末未缴税额为负数怎么调整
  • 海产品的增值税税率是多少
  • 投资公司取得的投资收益属于销售额吗
  • 财税实务与核算会计的区别在哪里?
  • 通货膨胀有什么危害?
  • 企业运输没有发票
  • 进项税额转出影响城建税吗
  • 电子银行承兑汇票查询
  • 自产产品用于广告要交消费税吗
  • 临时增加增值税发票
  • 业务员不拿工资怎么办
  • 固定资产作为实收资本报废怎么处理
  • 加油的时候可以开发票吗
  • 三证合一后没有去税务局登记会怎么样
  • 加油站的印花税计税金额
  • 农产品收购发票怎么抵扣
  • 小规模纳税人注销流程及费用
  • 个人独资企业租车缴纳税金
  • 退租水电费从押金里扣除
  • 补缴以前税收滞纳金多少
  • 不合规发票有哪些风险
  • 党费专用账户可以收取转账费用吗
  • 更改macbook
  • windows history命令
  • win10更新错误0x8000402
  • 房屋建筑物改扩建税务处理
  • 公司转让使用过的汽车要交哪些税费
  • 外商投资企业注册登记
  • 外籍人员个人所得税计算
  • flash process
  • 有了php源码该如何使用 新手
  • 车辆购置税的纳税义务发生时间为
  • 延期支付土地款利息会计处理
  • laravel enum
  • 权益的定义特征
  • 公允价值变动损益在利润表哪里
  • wordpress添加css
  • 面试官问几个问题
  • YII视图整合kindeditor扩展的方法
  • php gdb
  • 小规模建筑公司经营范围大全
  • 增值税直接减免税额要交企业所得税吗
  • JS初识
  • 企业为其他企业担保有什么责任
  • 未抵扣的进项发票,开出红字信息表,需要做进项税转出吗
  • 有净残值的固定资产累计折旧怎么算
  • PostgreSQL教程(七):函数和操作符详解(3)
  • 政府对企业提交的项目申请报告主要从等方面进行核准
  • 房地产卖房需要交契税吗现在
  • 半成品可以计入企业产值吗
  • 购买软件使用权计入无形资产吗
  • 政府代建工程
  • 资产减值哪些资产
  • 税务销售滞后是什么意思
  • 以物易物方式销售货物的增值税处理
  • 企业转让固定资产发生的费用
  • 中标服务费计入合同取得成本
  • 广告费和广告发布费什么区别
  • 公司购买汽车的购置税可以抵税吗
  • 小型便利店靠什么进行营利
  • 个体工商户怎样申请开票
  • 什么是汇总记账凭证账务处理程序?有哪些特点?
  • ubuntu怎么编辑文件
  • 如何利用批处理实现更改ip修改
  • centos怎么查看服务器配置
  • ubuntu netbook
  • xp系统电源设置在哪里
  • msg是啥
  • perl 教程
  • unity 动画播放
  • unity2.5d游戏地图处理
  • jquery可以实现哪些效果
  • 国家税务局开票软件下载
  • 贵州省地方税务局房地产税收征收管理办法
  • 电子发票和普通发票哪个好
  • 四川国税网上申报大厅
  • 价税分离有什么好处
  • 江苏省南京市国医堂
  • 居民个人从境外公司获得分红
  • 山西收入最高的县
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设