位置: 编程技术 - 正文

Android dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent详解

编辑:rootadmin

推荐整理分享Android dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

之前遇到事件分发,去网上找相关文章。。。感觉都没把这几个的关系说明白。研究了几篇不错的文章,今天在这整理一下,希望对大家有所帮助。 首先你要知道一点,当你触摸一个控件的时候,你就会调用该控件(或它的父类)的dispatchTouchEvent方法。那我们就来看一下dispatchTouchEvent方法的源码:

第一个条件在你setOnTouchListener注册了监听器之后就是true了 第二个条件就是它是不是enable的(在xml布局文件可以设置,button默认为true,imageview为false).关键是第三个条件:

也就是说如果我们在onTouch方法里返回true,就会让这三个条件全部成立,从而整个方法直接返回true。如果我们在onTouch方法里返回false,就会再去执行onTouchEvent(event)方法。(onclick是在onTouchEvent中回调的)

所以总结一下: 首先在dispatchTouchEvent中最先执行的就是onTouch方法,如果ontouch返回true,且该控件是enable的,且已经为其注册了监听器, dispatchTouchEvent也就返回true,那么onTouchEvent就不会执行,onclick也就不会执行了。(返回ture,可以理解为被dispatchTouchEvent它自己消耗了) 如果ontouch返回了false,或者另外两个条件不成立,onTouchEvent就可以执行了,那么dispatchTouchEvent的返回值就得再看onTouchEvent的返回情况了,有点绕(dispatchTouchEvent返回false可以理解为被自己的onTouchEvent消耗了 ,注意在onTouchEvent也是返回true或false,若是true就交给父控件的ontouchenent并且dispatchTouchEvent也会返回true,如果返回false,dispatchTouchEvent也返回false ,会将事件返回给父 View 的 onTouchEvent 进行消费) 其实还有一种情况,那就是返回 系统默认的 super.dispatchTouchEvent(ev),事件会自动的分发给当前 View 的 onInterceptTouchEvent 方法。

Android dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent详解

那么接下了,我们就来看一下onInterceptTouchEvent 了,这个比较好理解。 这里引用下别人的文章: onInterceptTouchEvent 的事件拦截逻辑如下:

1 如果 onInterceptTouchEvent 返回 true,则表示将事件进行拦截,并将拦截到的事件交由当前 View 的 onTouchEvent 进行处理; 2 如果 onInterceptTouchEvent 返回 false,则表示将事件放行,当前 View 上的事件会被传递到子 View 上,再由子 View 的 dispatchTouchEvent 来开始这个事件的分发(重复上一个逻辑); 3 如果 onInterceptTouchEvent 返回 super.onInterceptTouchEvent(ev),事件默认会被拦截,并将拦截到的事件交由当前 View 的 onTouchEvent 进行处理。(我觉得此处原文不太对,应该是和返回false作用一样吧,将事件继续往下传到子view上,你怎么看,欢迎留言。。。0-0)

下面继续OnTouchEvent: onTouchEvent用于处理事件,返回值决定当前控件是否消费(consume)了这个事件。尤其对于ACTION_DOWN事件,返回true,表示我想要处理后续事件;返回false,表示不关心此事件,并返回由父类的onTouchEvent(区别于onInterceptTouchEvent ,onTouchEvent是向上传递,直到遇到true才被消费掉)进行处理。

再总结一下: onInterceptTouchEvent负责对事件进行拦截,拦截成功后交给最先遇到onTouchEvent返回true的那个view进行处理。onInterceptTouchEvent事件的执行顺序是由父控件到子控件,并且优先于自己控件的onTouchEvent方法执行,onTouchEvent事件执行的顺序正好相反由子控件到父控件

参考文章:

android 判断EditText中输入的值是数字、字母还是汉字的方法 Stringtext=edInput.getText().toString();Patternp=Pattern.compile([0-9]*);Matcherm=p.matcher(text);if(m.matches()){Toast.makeText(Main.this,输入的是数字,Toast.LENGTH_SHORT).show();}p=Pattern.comp

android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项 android常见分辨率(mdpi、hdpi、xhdpi、xxhdpi)及屏幕适配注意事项1Android手机目前常见的分辨率1.1手机常见分辨率:4:3VGA*(VideoGraphicsArray)QVGA*(QuarterVG

解决android开发在大屏手机图片出现内存溢出 说明这个问题,首先来看一下实际的内存占用情况。我们创建一个最简单的android应用,一个Activity,内容是一张图片,图片放在drawable-hdpi目录下。布局

标签: Android dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent详解

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

上一篇:百度地图API报错 Caused by: java.lang.IllegalStateException: you have not supplyed the global app context i(百度地图api报错502)

下一篇:android 判断EditText中输入的值是数字、字母还是汉字的方法(Android 判断是否打开了微信)

  • 残疾人个人所得税减免怎么计算
  • 资产负债表债务法是什么意思
  • 税后经营净利润加折旧与摊销
  • 对方开给我的专票遗失了,让我上传发票
  • 企业电子发票申请不成功原因
  • 公司打到个人账户需要多久
  • 固定资产原值错误的账务处理
  • 汇算清缴报告和审计报告有什么区别
  • 法人投入投资款
  • 退休人员工资可以提福利费吗
  • 民间非营利组织会计报表
  • 出口抵减内销产品应纳税额年终结转
  • 其他公司向本企业借款
  • 委托加工合同如何标注多个地址
  • 附追索权的应收债权出售的会计处理
  • 税款滞纳金怎么入账
  • 增值税多缴纳0.03怎么算
  • 小规模纳税人附加税优惠政策2023
  • 银行处置以物抵债违法吗
  • 企业计算缴纳所得税标准
  • 建筑工程预收款预缴增值税的时间
  • 我的初级备考经验--有种力量叫坚持
  • 视同销售收入是否缴纳企业所得税?
  • 主营业务收入会计英语
  • 失去胜诉权但又有起诉权是什么意思
  • 评标费由谁支付
  • 公司注销时帐面清算
  • 外贸公司有出口退税吗
  • 未签订劳动合同工资如何给付
  • 分期服务费是啥
  • 银行贷款需要走第三方账户,第三方需要提供身份证
  • win10安全中心通知关闭
  • RPDFLchr.exe - RPDFLchr是什么进程 有什么用
  • js16.vip
  • 小型企业的资产负债表
  • 返还土地出让金如何追缴的
  • 上市公司转让股票所得要交个税吗?
  • 房地产开发成本明细
  • 项目的分包行为是否合理
  • 挂车车船税缴纳地点
  • 文心为何意
  • 出口退税附加税的计税基础
  • js基本数据类型和复杂数据类型的区别
  • 跨平台 gui
  • 收到招标文件怎么回函
  • 债权转让收益需缴税吗
  • 有限合伙企业的执行事务合伙人
  • 送货单需要跟在凭证后面吗
  • 成本核算需要哪些数据
  • 工厂杂工工资
  • 作废发票要不回来了怎么办
  • 福利费为什么通过应付职工薪酬科目要紧吗
  • 进口关税完税价格的计算公式
  • 企业亏损了
  • SQLserver2014(ForAlwaysOn)安装图文教程
  • 购入交易性金融资产的相关税费计入
  • 进口关税的计算是以什么为基础
  • 如何做一份有效的面包
  • 工业企业制造费用包括哪些
  • 坏账收不回来如何做分录
  • 增值税普通发票查询
  • 委托加工物资的加工费计入什么科目
  • 什么情况下需要割包皮
  • 两笔不同业务能转账吗
  • 机票行程单上没有金额怎么报销
  • 小企业会计准则调整以前年度费用分录
  • mysqladmin ping
  • mysql 源码 下载
  • Win10 Mobile/PC build 10586.589曝光:老机型有份
  • macbook硬盘中的其他
  • 怎样从零开始
  • cocos2dx 4.0
  • flash 3 utility
  • three.js碰撞检测
  • linux一些常用操作命令 (不定时更新)
  • JavaScript window.setTimeout() 的详细用法
  • jQuery简单实现title提示效果示例
  • js拖动效果
  • listview报错
  • 02112366电子税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设