您的位置:首页 > 移动开发 > Android开发

关于Android事件传递机制自己的理解

2018-01-09 12:15 288 查看
之前一直在外包公司,忙于生产,没有时间研究细致性的东西,近几天看了看Android的事件传递机制,稍做记录,后续更新。

先上一张图片:



在这张图中,可以看到,整个流程类似于一个U型结构,事件从Activity的dispatchTouchEvent出发,走完整个流程最终回到Activity的onTouchEvent函数中。从图中不难看出,整个流程分为两部分:

1:左边的流程,事件首先传入Activity的disPatchTouchEvent函数,如果不走Super函数,则不管return true/false,则事件,直接被消费;如果
return super(XXX),则向下传递到ViewGroup的disPatchTouchEvent函数,如果return true,则直接消费事件,返回return false,则把事件传递到父节点的onTouchEvent函数进行处理,
如果最终走了return super(XXX),则需要询问当前节点的onInterceptTouchEvent函数是否拦截此事件,需要拦截的话则把事件传递给当前节点的onTouchEvent去处理,否则事件继续向下传递。当事件传递到叶子节点View的disPatchTouchEvent函数的时候,如果自己需要处理此事件则return true,直接消费此事件,不处理此事件则把事件传递给父节点的onTouchEvent函数,如果最终走了return
super(XXX),则把事件传递给了自己的onTouchEvent函数,自此开始了第二部分流程。

2:右边的流程,事件传递到叶子节点的onTouchEvent函数,如果return true,则直接消费此事件,否则把时间向上传递到父节点的onTouchEvent函数,同样的道理,如果return
true,则消费此事件,否则继续向上传递,知道传到Activity的ontouchEvent函数,事件在这里进行处理。

至此,整个流程完成,流程中所说的事件均指的是ACTION_DOWN事件,UP和MOVE事件之后补充。

从整个流程中可以看出,当事件进入ViewGroup和View的dispatchTouchEvet和onTouchEvent函数的时候,如果这两个函数一旦return true,则事件将终止传递,Activity的dispatchTouchEvet函数除外,他是只要不走super函数,则直接消费(终止传递)。

未完待续...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: