所谓的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。

点击事件的分发由3个方法共同完成:
 public boolean dispatchTouchEvent(MotionEvent event)
用来进行事件分发,如果事件能传递给当前View,那么此方法一定会被调用,返回结果受View的onTouchEvent 和下级的dispatchTouchEvent方法影响,表示是否消耗当前事件。
    
 public boolean onInterceptTouchEvent(MotionEvent ev)
在上述方法内部调用,用来判断是否拦截是否拦截某个事件,如果当前View拦截了某个事件,那么在同一个事件序列中,此方法不会再次调用,返回结果表示是否拦截当前事件

 public boolean onTouchEvent(MotionEvent event)
在dispatchTouchEvent 方法中调用,用来处理点击事件,返回结果是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前View无法再次接受到事件。

对于一个根ViewGroup来说:

产生事件后
首先传递它,这时dispatchTouchEvent 会调用ViewGroup的onInterceptTouchEvent
-----ViewGroup的onInterceptTouchEvent返回true就表示拦截当前事件,接着事件会交给ViewGroup处理,即onTouchEvent会被调用
-----ViewGroup的onInterceptTouchEvent返回false表示不拦截事件,这个事件会传递给子元素,接着子元素的dispatchTouchEvent会被调用

事件传递:activity > Window > view

事件传递结论:
1.同一个事件序列是从手指接触屏幕那一刻开始,到手指离开屏幕那一刻结束。
2.正常情况下,一个事件序列只能被一个View拦截且消耗
3.某个View一旦决定拦截,那么这个事件序列只能它来处理,它的onInterceptTouchEvent不会再被调用               

4.某个View一旦开始,如果它不消耗ACTION_DOWN 事件即onTouchEvent返回来false,那么同一事件序列中的其它事件都不会再交给它来处理。
5.如果不消耗ACTION_DOWN以外的事件,那么这个点击事件会消失,此时父元素的onTouchEvent并不会被调用,并且当前View回持续收到后续事件,最后这些消失的事件会传递个给Activity处理
6.ViewGroup默认不拦截事件onInterceptTouchEvent默认返回fakse
7.View 没有onInterceptTouchEvent,一旦事件传递给View,onTouchEvent就会被调用
8.View的onTouchEvent默认消耗事件,返回true,除非它不可点击 clickable和longClickable同时为false;View的longClickable默认未false,clickable要分情况;
9.View的enable属性不影响onTouchEvent的默认值返回。
10.onClick 会发生的前提是当前View是可点的,并收到down 和up 事件
11.事件传递过程是由外向内的,事件总是先传递给父元素再由父元素分发给子元素。

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

  1. Atitit View事件分发机制

    1. Atitit View事件分发机制 1. Atitit View事件分发机制1 1.1. 三个关键方法 dispatchTouchEvent onInterceptTouchEvent onTo ...

  2. Android面试必问!View 事件分发机制,看这一篇就够了!

    在 Android 开发当中,View 的事件分发机制是一块很重要的知识.不仅在开发当中经常需要用到,面试的时候也经常被问到. 如果你在面试的时候,能把这块讲清楚,对于校招生或者实习生来说,算是一块不 ...

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

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

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

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

  5. Android View框架总结(七)View事件分发机制

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52282833 View布局告一段落,从本篇开始View事件相关分析, ...

  6. android view事件分发机制

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

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

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

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

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

  9. 自定义控件(视图)2期笔记10:自定义视图之View事件分发机制("瀑布流"的案例)

    1. Touch事件的传递:   图解Touch事件的传递,如下: 当我们点击子View 02内部的Button控件时候,我们就触发了Touch事件. • 这个Touch事件首先传递给了顶级父View ...

  10. android View事件分发机制结论

    原始博客有对源码的分析:http://blog.csdn.net/lmj623565791/article/details/39102591 结论:1.view事件的分发流程: dispatchTou ...

随机推荐

  1. Best Sequence

    poj1699:http://poj.org/problem?id=1699 题意:给你nge串,让你求出这些串组成的最小的串重叠部分只算一次. 题解:我的做法是DFS,因为数据范围只有10,就算是n ...

  2. Linux数据管理——文件锁定

    一.什么是文件锁定 对于锁这个字,大家一定不会陌生,因为我们生活中就存在着大量的锁,它们各个方面发挥着它的作用,现在世界中的锁的功能都可归结为一句话,就是阻止某些人做某些事,例如,门锁就是阻止除了屋主 ...

  3. 一起啃PRML - 1.2.2 Expectations and covariances 期望和协方差

    一起啃PRML - 1.2.2 Expectations and covariances 期望和协方差 @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ ...

  4. [FJSC2014]化合物

    [题目描述] 首长NOI惨跪,于是去念文化课了.现在,他面对一道化学题. 这题的来源是因为在一个奇怪的学校两个化竞党在玩一个奇怪的博弈论游戏,这个游戏很蛋疼,我相信你们也没有兴趣听. 由于这个游戏涉及 ...

  5. MS SQL Server 如何得到执行最耗时的前N条T-SQL语句-

    --得到最耗时的前N条T-SQL语句 --适用于SQL SERVER 2005及其以上版本 --给N赋初值为30 ;with maco as ( select top (@n) plan_handle ...

  6. 常用SQL语句(增删查改、合并统计、模糊搜索)

    转自:http://www.cnblogs.com/ljianhui/archive/2012/08/13/2695906.html 常用SQL语句 首行当然是最基本的增删查改啦,其中最重要的是查. ...

  7. python urllib2模块携带cookie

    今天干活遇到一个事.有一些网站的一些操作非得要求你登陆才能做,比如新浪微博,你要随便看看吧,不行,非得让你登陆了才能看,再比如一些用户操作,像更改自己的资料啦,个人的隐私啦巴拉巴拉的.想抓取这样的ur ...

  8. log4j的使用方法

    1.Log4j是什么? Log4j可以帮助调试(有时候debug是发挥不了作 用的)和分析 2.Log4j的概念 Log4j中有三个主要的组件,它们分别是 Logger.Appender和Layout ...

  9. JavaScript高级程序设计48.pdf

    设备中的键盘事件 任天堂Wii等设备可以通过键码知道用户按下了哪个键 复合事件 复合事件是DOM3级事件新添加的一类事件,用于处理IME的输入序列.IME(Input Method Editor,输入 ...

  10. Android学习笔记1:Activity与View

    推荐一系列优秀的Android开发源码 Activity是Android应用中负责与用户交互的组件. View组件是所有UI控件.容器控件的基类,View组件就是Android应用中用户实实在在看到的 ...