最近开发一个项目中,banner图左右切换和下拉刷新手势有冲突,为此去研究了事件分发,网上资料一大抄,有些讲的不对有些讲的不全,结合了网上一些博文以及源码总结如下

 一个完整的触摸事件包含down,move(一个或多个),up或cancel三个阶段,触摸手势是一个事件系列,以1个down事件开始,接下去是0个或多个move事件,最后以up或者cancel结束;
    1、涉及到事件分发的方法主要有 view类下的DispatchTouchEvent(事件分发)和OnTouchEvent(事件响应)以及Group下的onInterceptTouchEvent(事件拦截)
    2、DispatchTouchEvent会将事件从根节点层层下发直到某个结点的OnTouchEvent消费了此事件或者所有结点处理完成
    3、onInterceptTouchEvent方法只有在ViewGroup才存在,在DispatchTouchEvent内部调用,方法返回值决定此事件是否被当前Viewgroup拦截;如果返回值为true,则事件被拦截,该事件不会下发给子控件,此事件会交由当前viewgroup对应的OnTouchEvent处理,后续事件不会再触发onInterceptTouchEvent,直接交由OnTouchEvent处理;如果返回false且当前viewgroup不是最终的控件,后续的事件还是会触发onInterceptTouchEvent
    4、OnTouchEvent返回值表示当前控件是否消费了当前事件,如果down事件返回true,后续事件都会触发OnTouchEvent(就算move事件返回false);如果down事件返回false,后续事件再也不会传给此控件
    5、setOnTouchListener为用户自定义事件回调方法,它会在OnTouchEvent之前执行,如果方法返回true表示自定义回调方法消费了事件,OnTouchEvent将不会执行
    6、当一整条事件链的OnTouchEvent方法都返回false,事件则会由子控件向父控件逐级上发,直到某个父容器OnTouchEvent方法返回true或者全部上发完毕
    7、一旦确认某个控件OnTouchEvent返回true,后续事件传递过来时候不会触发onInterceptTouchEvent
    8、当某个down事件被子view消费,但后续某个move事件被viewgroup拦截

android ontouch事件分发机制的更多相关文章

  1. Android View 事件分发机制 源码解析 (上)

    一直想写事件分发机制的文章,不管咋样,也得自己研究下事件分发的源码,写出心得~ 首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个My ...

  2. Android之事件分发机制

    本文主要包括以下内容 view的事件分发 viewGroup的事件分发 首先来看两张图 在执行touch事件时 首先执行dispatchTouchEvent方法,执行事件分发. 再执行onInterc ...

  3. android的事件分发机制理解

    android的事件分发机制理解 1.事件触发主要涉及到哪些层面的哪些函数(个人理解的顺序,可能在某一层会一次回调其它函数) activity中的dispatchTouchEvent .layout中 ...

  4. android view事件分发机制

    首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志 ...

  5. Android View 事件分发机制 源代码解析 (上)

    一直想写事件分发机制的文章,无论咋样,也得自己研究下事件分发的源代码.写出心得~ 首先我们先写个简单的样例来測试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个M ...

  6. Android onTouch事件传递机制

    Android onTouch事件介绍: Android的触摸事件:onClick, onScroll, onFling等等,都是由许多个Touch组成的.其中Touch的第一个状态肯定是ACTION ...

  7. Android View 事件分发机制详解

    想必很多android开发者都遇到过手势冲突的情况,我们一般都是通过内部拦截和外部拦截法解决此类问题.要想搞明白原理就必须了解View的分发机制.在此之前我们先来了解一下以下三个非常重要的方法: di ...

  8. 浅谈Android View事件分发机制

    引言 前面的文章介绍了View的基础知识和View的滑动,今天我们来介绍View的另一个核心知识,View的事件分发机制. 点击事件的传递规则 所谓的点击事件的分发机制,其实就是对MotionEven ...

  9. Android开发——事件分发机制详解

    0. 前言   转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52566965 深入学习事件分发机制,是为了解决在Android开发中 ...

随机推荐

  1. linux sysnc

    rsync -az --delete --exclude="test/exclude/" test /data/sync/  同步目录文件,排除test/exclude目录 实现目 ...

  2. 运行WPS遇到的问题及解决办法

    http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Class/cases/find_the_bugs.php# For this case we are goin ...

  3. 利用GCTA工具计算复杂性状/特征(Complex Trait)的遗传相关性(genetic correlation)

    如文章"Genome-wide Complex Trait Analysis(GCTA)-全基因组复杂性状分析"中介绍的GCTA,是一款基于全基因组关联分析发展的分析工具,除了计算 ...

  4. 利用命令行将项目传到github上的简单操作

    (1)安装git后,打开cmd,进入要上传的文件夹中: (2)输入git init初始化本地git仓库: (3)git add .将所有文件提交到暂存区: (4)git commit -m'说明文字' ...

  5. 在ubuntu 16.04系统环境中搭建NAS(samba/iscsi/nfs)

    在ubuntu 16.04系统中搭建NAS环境 一.基本配置1:设置静态IPvi /etc/network/interfaces#iface ens32 inet dhcpiface ens32 in ...

  6. nginx php-fpm安装配置

    nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端. nginx一般是把请求发fastcgi管理进程处理,fascgi管 ...

  7. 1、C语言基本数据类型

    1.分类如图: 2.大小如下 char                        1字节 short                      2字节 int                   ...

  8. get_object_vars($var) vs array($var)

    get_object_vars(\(var) vs array(\)var) test case class Test { public function actionGetObjectVarsVsA ...

  9. mysql日志 解析

    mysql有4种不同的日志,分别是二进制日志,查询日志,慢查询日志和错误日志,这些日记记录着数据库工作的方方面面,可以帮助我们了解数据库的不同方面的踪迹,下面先介绍二进制日志的作用和使用方法,并利用二 ...

  10. eclipse在光标停留在同一对象的背景色提示,开启与关闭

    eclipse在光标停留在变量上的时候,同一变量能够提示相同的背景色.这个功能感觉不起眼,但是实在是很好用啊.如果不小心点消失了会很麻烦. 这里留个记录,如果关闭了记得开启: 开启关闭的位置在工具栏上 ...