关于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函数,则直接消费(终止传递)。
未完待续...
先上一张图片:
在这张图中,可以看到,整个流程类似于一个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函数,则直接消费(终止传递)。
未完待续...
相关文章推荐
- Android TouchEvent 事件传递机制简单理解
- 自己动手写一个测试Android事件传递机制的demo
- android Touch事件传递自己理解
- Android事件传递机制以及ViewGroup的onInterceptTouchEvent的理解
- 快速理解android事件传递拦截机制概念
- 一张图理解Android事件传递机制
- 关于事件拦截机制-自己的理解
- 关于Android事件传递机制
- 关于android触摸事件传递机制
- Android事件分发传递机制的领悟和理解
- Android事件分发机制-自己理解以后的阐述
- 关于Android事件分发机制的理解
- Android 触摸事件传递机制
- Android Activity 和 ViewGroup中事件触发和传递机制
- 转:Android view事件传递机制
- Android ViewGroup中事件触发和传递机制
- Android中ViewGroup到View的Touch事件的传递机制
- Android Touch事件传递机制解析
- android ViewGroup中事件触发和传递机制
- android事件传递机制以及onInterceptTouchEvent()和onTouchEvent()详解二之小秘与领导的故事