从品牌网站建设到网络营销策划,从策略到执行的一站式服务
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了黑山免费建站欢迎大家使用!
更多请关注MemoMind
事件经过主要的三层,分别是Activity、Layout(多个)、View
三者都拥有dispatchTouchEvent和onTouchEvent方法。
dispatchTouchEvent是用来控制事件分发的(隧道方式传递)。从源码的角度看,其逻辑控制等起主导作用;从使用角度看,在diapatchTouchEvent中用逻辑判断、设置Event的action是个好的方法,而改变其return值会让事件丢失。
onTouchEvent是用来处理、消费事件的。return true标志着事件已被消费;return false标志着事件未被消费,往Layout/Activity方向传递。
Layout除了拥有这两个方法,还独有onInterceptTouchEvent方法。
onInterceptTouchEvent是在事件由Layout分发到View之前的一个拦截机制。因为只通过Layout的dispatchTouchEvent操控只能让事件丢失。
如果onInterceptTouchEvent return true,表明拦截事件,事件就不会继续分发而是跳到Layout的onTouchEvent方法中去处理;return false则事件继续分发。
在众多分析事件机制的文章中,很难看到与onTouch、onClick关联起来的解释。开始时我也拿捏不好onTouch和onTouchEvent的关系。
事实上,onTouch是在onTouchEvent之前执行的。如果onTouch return true,表示事件已经被消费,不会调用onTouchEvent了。
而onClick呢,则是在onTouchEvent的ACTION_DOWN和ACTION_UP都执行完之后,才会触发onClick。也就是说,在此之前任意位置return了true,onClick都不会被调用。
至此,我产生了一个疑问:Android为什么要这么设计事件传递机制?
① onInterceptTouchEvent:是Layout特有的,是给予Layout对于Event的独立把控权,而不是傻傻的等待事件再冒泡传递回onTouchEvent。
② onTouch:区分于onTouchEvent,给开发者不破坏基础事件传递逻辑(比如 Button的onTouchEvent默认的Super.onTouchEvent()里面是有逻辑判断来决定return值)的情况下对事件有自己的把控操纵权。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图