View事件分发机制
所谓的事件分发,其实就是对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事件分发机制的更多相关文章
- Atitit View事件分发机制
1. Atitit View事件分发机制 1. Atitit View事件分发机制1 1.1. 三个关键方法 dispatchTouchEvent onInterceptTouchEvent onTo ...
- Android面试必问!View 事件分发机制,看这一篇就够了!
在 Android 开发当中,View 的事件分发机制是一块很重要的知识.不仅在开发当中经常需要用到,面试的时候也经常被问到. 如果你在面试的时候,能把这块讲清楚,对于校招生或者实习生来说,算是一块不 ...
- Android View 事件分发机制 源码解析 (上)
一直想写事件分发机制的文章,不管咋样,也得自己研究下事件分发的源码,写出心得~ 首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个My ...
- Android View 事件分发机制详解
想必很多android开发者都遇到过手势冲突的情况,我们一般都是通过内部拦截和外部拦截法解决此类问题.要想搞明白原理就必须了解View的分发机制.在此之前我们先来了解一下以下三个非常重要的方法: di ...
- Android View框架总结(七)View事件分发机制
请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52282833 View布局告一段落,从本篇开始View事件相关分析, ...
- android view事件分发机制
首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志 ...
- 浅谈Android View事件分发机制
引言 前面的文章介绍了View的基础知识和View的滑动,今天我们来介绍View的另一个核心知识,View的事件分发机制. 点击事件的传递规则 所谓的点击事件的分发机制,其实就是对MotionEven ...
- Android View 事件分发机制 源代码解析 (上)
一直想写事件分发机制的文章,无论咋样,也得自己研究下事件分发的源代码.写出心得~ 首先我们先写个简单的样例来測试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个M ...
- 自定义控件(视图)2期笔记10:自定义视图之View事件分发机制("瀑布流"的案例)
1. Touch事件的传递: 图解Touch事件的传递,如下: 当我们点击子View 02内部的Button控件时候,我们就触发了Touch事件. • 这个Touch事件首先传递给了顶级父View ...
- android View事件分发机制结论
原始博客有对源码的分析:http://blog.csdn.net/lmj623565791/article/details/39102591 结论:1.view事件的分发流程: dispatchTou ...
随机推荐
- Emily姨妈家的猫
按书上的样例,慢慢理解. 其实,JAVASCRIPT也应该可以写出正规点的,封装性好的代码. <html> <body> <script type="text/ ...
- 【poj3070】矩阵乘法求斐波那契数列
[题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [ ...
- 基于Maven的spring_security入门
配置文件的修改点没什么变化,可以参考:http://blog.csdn.net/ouitiken/article/details/8830505 pom.xml的依赖参考: <dependenc ...
- android ListView异步加载图片(双缓存)
首先声明,参考博客地址:http://www.iteye.com/topic/685986 对于ListView,相信很多人都很熟悉,因为确实太常见了,所以,做的用户体验更好,就成了我们的追求... ...
- win7下登陆中国银行网上银行IE浏览器版本过高问题解决
2013-11-23 2013-11-23登录中国银行出现以下提示. 操作系统为windows7 64位旗舰版,搜狗浏览器版本为4.1.1.7598.想不到突然出现如下提示.打电话去问,告知使用IE7 ...
- FishEye简介
前言 在项目开发过程中,随着开发的进行,将有大量的代码编写提交到代码仓库,如何能全面准确的了解源代码的变化,提交的频率,代码量的趋势,发现代码的缺陷,将是控制源代码质量的重要指标,这个时候一个 ...
- 用sql增、修改、删除字段
--给一个表增加一个字段 ); --给一个表修改一个字段的数据类型 ,); --通用sql修改字段的用法 ,); --删除一个字段 alter table wm_goods drop column b ...
- AS 学习笔记 for in 和 for each in
for in 的速度比 for each in 慢很多倍 ~~ var myArray:Array = new Array(); myArray["a"] = "zer ...
- POJ_1065_Wooden_Sticks_(动态规划,LIS+鸽笼原理)
描述 http://poj.org/problem?id=1065 木棍有重量 w 和长度 l 两种属性,要使 l 和 w 同时单调不降,否则切割机器就要停一次,问最少停多少次(开始时停一次). Wo ...
- BZOJ1935: [Shoi2007]Tree 园丁的烦恼
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 552 Solved: 220[Submit][ ...