博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】触屏事件传递简述
阅读量:6760 次
发布时间:2019-06-26

本文共 983 字,大约阅读时间需要 3 分钟。

  hot3.png

##一个典型的结构模型

ActivityA包含ViewGroupB,ViewGroupB包含ViewC,这里选取ViewGroupB(中间节点)作为当前节点视角

在此输入图片描述

##过程一:当前节点与父节点的事件关系

ActivityA只关心ViewGroupB.onDispatchTouchEvent返回值,只要在ACTION_DOWN分发过程中B.onDispatchTouchEvent()返回为true,那么后续的事件都会向B分发。至于ViewGroupB在onDispatchTouchEvent方法中是怎么处理的,父节点ActivityA并不会过问。

换句话说,父节点向***直接子节点ViewGroupB***兜售ACTION_DOWN事件,子节点使用onDispatchTouchEvent方法的返回值进行应答,只要子节点表示能够处理ACTION_DOWN,那么父节点就会将后续事件持续交给子节点。

##过程二:当前节点与子节点的事件关系

ViewGroupB从上一级收到ACTION_DOWN事件之后,会调用onInterceptTouchEvent判断是否进行拦截。如果不拦截,那么流程与上面的“过程一”一致,如果拦截,那么ViewGroupB就吃掉事件,直接忽略ViewC。

不过onInterceptTouchEvent属于内部方法,这个方法本身并不会影响当前节点的onDispatchTouchEvent返回值。

##onDispatchTouchEvent返回值的判断

通常情况下,一个节点的onDispatchTouchEvent返回值只与当前节点的onTouchEvent返回值和子节点的onDispatchTouchEvent返回值有关:

this.onDispatchTouchEventValue = child.onDispatchTouchEventValue || this.onTouchEvent

当然,也可以强制给onDispatchTouchEvent赋一个返回值,尽管如此,也不应该强制抛弃原有的事件机制,因为原有的事件机制会进行一些状态清理等操作。

ACTION_DOWN示例图: 在此输入图片描述

####Android分享 Q群:315658668

转载于:https://my.oschina.net/xesam/blog/396696

你可能感兴趣的文章
程序员总结:帮助你早些明白一些道理
查看>>
DI是实现面向切面和面向抽象的前提
查看>>
ABAP中TAB分隔符的使用
查看>>
smartforms初始化
查看>>
iOS buttonWithType:101 苹果私有api
查看>>
条款10:令operator=返回一个reference to *this
查看>>
单例模式
查看>>
.NET实现多个不同有效时间Session方案思考
查看>>
移动端常见问题及解决方案
查看>>
Github 使用的Markdown语言
查看>>
UVA 247 - Calling Circles (Floyd)
查看>>
Exchange: How to get Mailbox size in Exchange Shell?
查看>>
SqlBulkCopy使用心得
查看>>
几点要求自己也可以借鉴
查看>>
Highcharts的一些属性
查看>>
Django 中间件
查看>>
学城项目知识点整理及源码
查看>>
sqlServer,oracle中case关键字的用法
查看>>
表驱动法之保险费率
查看>>
娇俏2011年春装
查看>>