文档章节

Android事件传递

Chain
 Chain
发布于 2014/04/17 13:33
字数 541
阅读 291
收藏 1


事件经过主要的三层,分别是Activity、Layout(多个)、View


三者都拥有dispatchTouchEvent和onTouchEvent方法。

dispatchTouchEvent是用来控制事件分发的(隧道方式传递)。从源码的角度看,其逻辑控制等起主导作用;从使用角度看,在diapatchTouchEvent中用逻辑判断、设置Event的action是个好的方法,而改变其return值会让事件丢失。

onTouchEvent是用来处理、消费事件的。return true标志着事件已被消费;return false标志着事件未被消费,往Layout/Activity方向传递。


Layout除了拥有这两个方法,还独有onInterceptTouchEvent方法。

onInterceptTouchEvent是在事件由Layout分发到View之前的一个拦截机制。因为只通过Layout的dispatchTouchEvent操控只能让事件丢失

如果onInterceptTouchEvent return true,表明拦截事件,事件就不会继续分发而是跳到Layout的onTouchEvent方法中去处理;return false则事件继续分发。


在众多分析事件机制的文章中,很难看到与onTouch、onClick关联起来的解释。开始时我也拿捏不好onTouch和onTouchEvent的关系。

事实上,onTouch是在onTouchEvent之前执行的。如果onTouch return true,表示事件已经被消费,不会调用onTouchEvent了。

而onClick呢,则是在onTouchEvent的ACTION_DOWN和ACTION_UP都执行完之后,才会触发onClick。也就是说,在此之前任意位置return了true,onClick都不会被调用。


至此,我产生了一个疑问:Android为什么要这么设计事件传递机制?

① onInterceptTouchEvent:是Layout特有的,是给予Layout对于Event的独立把控权,而不是傻傻的等待事件再冒泡传递回onTouchEvent。

② onTouch:区分于onTouchEvent,给开发者不破坏基础事件传递逻辑(比如 Button的onTouchEvent默认的Super.onTouchEvent()里面是有逻辑判断来决定return值)的情况下对事件有自己的把控操纵权。

© 著作权归作者所有

共有 人打赏支持
上一篇: 简单工厂
下一篇: Android PopupWindow
Chain
粉丝 6
博文 92
码字总数 52216
作品 0
朝阳
私信 提问
加载中

评论(1)

kaogula
kaogula
很清晰,不过onInterceptTouchEvent 返回true之后,应该先执行Layout的onTouch()监听
Android中父View和子view的点击事件的执行过程

Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTIONDOWN->ACTIONMOV...

火云
2015/06/11
0
0
Android Touch事件传递机制解析

没事逛论坛,无意间看到了一篇非常不错的帖子,转载如下: 开篇语:最近程序在做一个小效果,要用到touch,结果整得云里面雾里的,干脆就好好把android touch机制好好看了一下,呵呵。。 an...

长平狐
2012/10/09
2.1K
0
Android源码分析-点击事件派发机制

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17339857 概述 一直想写篇关于Android事件派发机制的文章,却一直没写,这两天刚好是周末,有时间了,想想写一篇吧,...

长平狐
2013/12/25
1K
0
android基础知识03——事件处理02:事件流顺序

1、android事件的产生 这一部分比较难,需要涉及android整个架构的基础知识,包括linux系统对事件的处理。 这一部分内容来自 android的窗口机制分析------事件处理 。 由于Android是linux内核...

迷途d书童
2012/03/23
1K
0
Android 机制篇 - 事件分发机制超详解(🔥🔥🔥🔥🔥🔥🔥🔥)

Android 虽然不是四大组件,但其并不比四大组件的地位低(涉及面的广度和深入甚至比四大组件还复杂🔥)。而View的核心知识点“事件分发机制”则是不少刚入门同学的拦路虎(1、项目中处处遇...

Pepsimaxin
2018/07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

lucene 评分要素解析

基本规则:

Java搬砖工程师
27分钟前
0
0
ubutnu 14.04 安装JIRA

系统版本:Ubuntu 14.04 下载jira安装文件 sudo wget https://downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-7.1.9-x64.bin 修改文件权限 sudo chmod 777 atl......

Kampfer
37分钟前
0
0
软件开发模型优缺点及其适用范围

瀑布模型、快速原型模型、增量模型、螺旋模型 瀑布模型也称软件生存周期模型。 优点: (1)它在软件工程中占有重要地位,它提供了软件开发的基本框架,这比依靠“个人技艺”开发软件好得多。...

无极之岚
37分钟前
0
0
孩子们各显神通对付 iOS 12「屏幕使用时间」的限制

简评:2018 年秋季,苹果公司推出了 iOS 12,其中备受好评的一项改变是:增加了屏幕使用时间限制,以减轻沉迷手机的状况。三个月过去后,这项功能似乎并没有对孩子造成太多困扰,道高一尺魔高...

极光推送
42分钟前
2
1
springCloud Spring Boot mybatis分布式微服务云架构-docker-feign-hystrix-ribbon(七)

简介 在上一节中,我们讨论了feign+hystrix在项目开发中,除了考虑正常的调用之外,负载均衡和故障转移也是关注的重点,这也是feign + ribbon+hystrix的优势所在,本节我们就讨论一下在feign...

sccspuercode
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部