1,Activity,ViewGroup,View的关系

2,触摸事件

3,传递事件时的重要函数

4,事件传递流程参考图

5,其它参考资料

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)事件的传递流程(*)的更多相关文章

  1. Android webkit 事件传递流程详解

    前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent ...

  2. Android webkit 事件传递流程通道分析

    前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent ...

  3. Android Touch事件之二:dispatchTouchEvent()和onTouchEvent()篇

    2015-12-01 15:06:14 Android Touch事件第一篇:Touch事件在父ViewGroup和子View之间的传递简单分析了事件的传递流程,这次深入了解下dispatchTouc ...

  4. android中的事件传递和处理机制

    一直以来,都被android中的事件传递和处理机制深深的困扰!今天特意来好好的探讨一下.现在的感觉是,只要你理解到位,其实事件的 传递和处理机制并没有想象中的那么难.总之,不要自己打击自己,要相信自己 ...

  5. Android webkit keyevent 事件传递过程

    前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题.所以索性研究了一下keyevent 事件的传递流程. frameworks 层 keyevent ...

  6. Android Touch事件传递机制 二:单纯的(伪生命周期)

    转载于:http://blog.csdn.net/yuanzeyao/article/details/38025165 在前一篇文章中,我主要讲解了Android源码中的Touch事件的传递过程,现在 ...

  7. Android touch 事件传递机制

    前言: (1)在自定义view的时候经常会遇到事件拦截处理,比如在侧滑菜单的时候,我们希望在侧滑菜单里面有listview控件,但是我们希望既能左右滑动又能上下滑动,这个时候就需要对触摸的touch事 ...

  8. Android touch事件的派发流程

    Android TouchEvent事件传递机制 通俗易懂,能够了解Touch事件派发的基本流程. Android中的dispatchTouchEvent().onInterceptTouchEven ...

  9. Android Touch事件传递机制解析 (推荐)

    最近新闻列表里的下拉 down up  move 等等让我十分头疼 ,无意间看到了一篇非常不错的帖子,转载如下: 开篇语:最近程序在做一个小效果,要用到touch,结果整得云里面雾里的,干脆就好好把a ...

随机推荐

  1. 生成中文版JavaDoc

    RT. 在用IDEA生成中文版JavaDoc时,出现如下问题: java.lang.IllegalArgumentException at sun.net.www.ParseUtil.decode(P ...

  2. matrix_last_acm_1

    password 123 A http://acm.hust.edu.cn/vjudge/contest/view.action?cid=96950#problem/A 题意:n个数初始ai,m次操作 ...

  3. EXCEL 跨表比较数据

    Public Sub Compare(fullname As String, sheet As String) Dim conn, sql, rows, i, cellContents ,rowInd ...

  4. jdbc读取数据库表

    把结果集封装为List // 通过结果集元数据封装List结果集 public static List<Map<String, Object>> read(String sql ...

  5. java web项目,java类中获得WEB-INF路径

    private static String getWebInfPath() { URL url = 当前类.class.getProtectionDomain().getCodeSource().ge ...

  6. xxx.properties获取方法

    1.手动获取加载 Locale locale = Locale.getDefault(); ResourceBundle localResource = ResourceBundle.getBundl ...

  7. Grid分组汇总

    Ext.onReady(function () {                Ext.define('personInfo', {                    extend: 'Ext. ...

  8. vi编辑器的常见使用技巧

    光标移动 在普通模式下, 1.按 h 向左移动光标 按 h + 数字n 可以向右移动 n个字符   比如 h + 5  就是向左移动5个字符 2.按j向下移动光标 3.按k向上移动光标 4.按 l 向 ...

  9. LINGO使用教程(一)

    LINGO是用来求解线性和非线性优化问题的简易工具.LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果. 1.LINGO快速入门 当你在 ...

  10. mysql limit

    select * from tablename limit 1,4即取出第2条至第5条,4条记录