最近开发一个项目中,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. 微软软件开发技术二十年回顾-COM、OLE、ActiveX及COM+篇

    本文摘自:http://www.job168.com/info/read_100394.html 微软的许多技术,如OLE.ActiveX.以及DirectX等都是基于COM技术而建立起来的.微软本身 ...

  2. mongodb sharding 简单部署记录

    创建目录 mkdir {mongos,config,shard1,shard2} mkdir -p mongos/{data,log} mkdir -p config/{data,log} mkdir ...

  3. jQuery 取消事件冒泡 阻止后续内容执行 闭包函数 (学习笔记)

    1.取消事件冒泡 <title>取消事件冒泡</title> <style> div { border:solid 1px black; } </style& ...

  4. linux 账号管理与ACL权限设定

    此文涉及命令:useradd.usermod.userdel.passwd.chage.setfacl.getfacl.su.sudo.fingr.chfn.chsh.id.groupadd.grou ...

  5. 解决Linux系统下程序找不到动态库的方法

    思路:一般来说,通过make命令已经将程序依赖的动态库编译出来了,通过make install命令已经将动态库安装到系统的某个路径下.找没找到动态库就看这个路径是否包含在系统默认搜索动态库的路径中,如 ...

  6. Android之RecyclerView(一)

    概述 RecyclerView 是一个 ViewGroup,它用于渲染任何基于适配器的 View.它被官方定义为 ListView 和 GridView 的取代者,是在 Support V7 包中引入 ...

  7. JQUERY删除操作

    var path = '<%=request.getContextPath()%>/baseReorganizeController/deleteBaseReorganize';      ...

  8. kaggle 竞赛之套路

    图片数据:卷积还是王道,有几个比较通用性的框架被人拿来改来改去 非图片特征数据:用分类: boost系列算法:牛逼的框架实现 xgboost AdaBoost算法针对不同的训练集训练同一个基本分类器( ...

  9. C#中的线程(一)入门

    文章系参考转载,英文原文网址请参考:http://www.albahari.com/threading/ 作者 Joseph Albahari,  翻译 Swanky Wu 中文翻译作者把原文放在了& ...

  10. Word论文写作如何实现公式居中、编号右对齐

    第一步:插入表格 在公式所在行居中插入一行三列的表格,具体操作为: a.设置行居中,快捷键Ctrl+E: b.插入->表格->3×1的表格: 2 第二步:修改表格属性 新插入的表格三列等宽 ...