Android Touch(1)事件的传递流程(*)
1,Activity,ViewGroup,View的关系
本文按层次比喻,ViewGroup与其中的View的关系不是父子,而是上下层。父子描述继承关系更准确些。
最下层是Activity,Activity上面是一系列ViewGroup,ViewGroup上面是View。
事件总是从Activity向上层传递。

2,触摸事件
一个手指在屏幕上触摸动作产生一组事件,其中常见的是 ACTION_DOWN,ACTION_MOVE...MOVE…MOVE、最后ACTION_UP。每一个事件都是从下层向上层传递。
单手指操作:ACTION_DOWN---ACTION_MOVE----ACTION_UP
多手指操作:ACTION_DOWN---ACTION_POINTER_DOWN---ACTION_MOVE--ACTION_POINTER_UP---ACTION_UP.
3,传递事件时的重要函数
▐ 事件分发:public boolean dispatchTouchEvent(MotionEvent ev)
▐ 事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev)
▐ 事件响应:public boolean onTouchEvent(MotionEvent ev)
它们在同一层调用顺序是 dispatchTouchEvent--->onInterceptTouchEvent --->onTouchEvent
只有ViewGroup有onInterceptTouchEvent方法,如下表:
| 方法 | Activity |
ViewGroup |
View |
| public boolean dispatchTouchEvent(MotionEvent ev) | 有 | 有 | 有 |
| public boolean onInterceptTouchEvent(MotionEvent ev) | 无 | 有 | 无 |
| public boolean onTouchEvent(MotionEvent ev) | 有 | 有 | 有 |
它们的返回值含义或功能表如下:
| 方法\返值 | true | false | super.同名函数 | |
| Activity | dispatchTouchEvent | 消费 | 消费 | 不消费,续传 |
| onTouchEvent | 消费 | 消费 | 消费 | |
| ViewGroup | dispatchTouchEvent | 消费 |
不消费,回溯 |
不消费,续传 |
| onInterceptTouchEvent |
拦截 |
不消费,续传 | 不消费,续传 | |
| onTouchEvent |
消费 |
不消费,回溯 | 不消费,回溯 | |
| View | dispatchTouchEvent | 消费 | 不消费,回溯 | 不消费,续传 |
| onTouchEvent | 消费 | 不消费,回溯 | 不消费,回溯 |
4,事件传递流程参考图
图中:
- 每条泳道是不同的处理类,
- 整个图是U型,绿色粗箭头。事件以Activity开始,也以它结束(所有人都没处理时,最后就由activity处理)。
- 细实箭头是返回true,虚线是返回false,粗线是返回super.XX同名方法。
- super.xxx是保证事件能继续传递的调用。是U型图的主线。
- dispatchTouchEvent、onTouchEvent返回true表示处理了事件。返回false都表示把事件传回前一层。

- 当down在某处被消费(返回true)后,后续的move,up就以短路径过去,不是按原路径。

5,其它参考资料
点击下载 PRE_andevcon_mastering-the-android-touch-system.pdf
Android Touch(1)事件的传递流程(*)的更多相关文章
- Android webkit 事件传递流程详解
前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent ...
- Android webkit 事件传递流程通道分析
前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent ...
- Android Touch事件之二:dispatchTouchEvent()和onTouchEvent()篇
2015-12-01 15:06:14 Android Touch事件第一篇:Touch事件在父ViewGroup和子View之间的传递简单分析了事件的传递流程,这次深入了解下dispatchTouc ...
- android中的事件传递和处理机制
一直以来,都被android中的事件传递和处理机制深深的困扰!今天特意来好好的探讨一下.现在的感觉是,只要你理解到位,其实事件的 传递和处理机制并没有想象中的那么难.总之,不要自己打击自己,要相信自己 ...
- Android webkit keyevent 事件传递过程
前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent ...
- Android Touch事件传递机制 二:单纯的(伪生命周期)
转载于:http://blog.csdn.net/yuanzeyao/article/details/38025165 在前一篇文章中,我主要讲解了Android源码中的Touch事件的传递过程,现在 ...
- Android touch 事件传递机制
前言: (1)在自定义view的时候经常会遇到事件拦截处理,比如在侧滑菜单的时候,我们希望在侧滑菜单里面有listview控件,但是我们希望既能左右滑动又能上下滑动,这个时候就需要对触摸的touch事 ...
- Android touch事件的派发流程
Android TouchEvent事件传递机制 通俗易懂,能够了解Touch事件派发的基本流程. Android中的dispatchTouchEvent().onInterceptTouchEven ...
- Android Touch事件传递机制解析 (推荐)
最近新闻列表里的下拉 down up move 等等让我十分头疼 ,无意间看到了一篇非常不错的帖子,转载如下: 开篇语:最近程序在做一个小效果,要用到touch,结果整得云里面雾里的,干脆就好好把a ...
随机推荐
- ios 百度地图
百度地图 中的注意事项 1. 百度地图中 使用了c++ 设置buidSeting compoileSource 为 Object-C++ 强制使用oc++编译器 2. 设置 BuidSeti ...
- UICollectionViewLayout
http://blog.csdn.net/majiakun1/article/details/17204921
- ios后台下载
http://www.cocoachina.com/industry/20131106/7304.html
- quickeys 过期解决办法
自己在系统中找了大半天,终于发现了一个叫.com.quickeys.quickeysX3.plist的文件,存在于硬盘的 ~/Library/Preferences/ 目录下,直觉感觉文件的大体内容应 ...
- 苹果开发——App内购以及验证store的收据(二)
原地址:http://zengwu3915.blog.163.com/blog/static/2783489720137605156966?suggestedreading 三. 客户端使用Store ...
- CF444C DZY Loves Colors
考试完之后打的第一场CF,异常惨烈呀,又只做出了一题了.A题呆滞的看了很久,领悟到了出题者的暗示,应该就是两个点的时候最大吧,不然的话这题肯定特别难敲,YY一发交上去然后就过了.然后就在不停地YY B ...
- POJ 3978 Primes(素数筛选法)
题目 简单的计算A,B之间有多少个素数 只是测试数据有是负的 //AC //A和B之间有多少个素数 //数据可能有负的!!! #include<string.h> #include< ...
- HDU 1098 Ignatius's puzzle(数学归纳)
以下引用自http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=8466&messageid=2&deep=1 题意以 ...
- POJ 1419
#include <iostream> #define MAXN 105 #define max _max using namespace std; int j; bool _m[MAXN ...
- SQL 比较乱
--DROP TABLE T_UserInfo---------------------------------------------------- --建测试表 CREATE TABLE T_Us ...