文档章节

Touch事件传递顺序。

o
 oschina2136
发布于 2016/02/07 15:33
字数 557
阅读 106
收藏 4

首先所有的View和Activity都有

dispatchTouchEvent//用来分发Touch
onTouchEvent//用来响应Touch

而ViewGroup则还有一个

onInterceptTouchEvent//用来拦截Touch

当按下界面时首先是由Activity的 dispatchTouchEvent被调用。然后是根View的dispatchTouchEvent,不断向子View传递,然后由最最后的子View首先响应onTouchEvent,接着父View的onTouchEvent不断被调用。

但是如果当前的View是ViewGroup时,则在dispatchTouchEvent被调用后onInterceptTouchEvent会被调用。

以上的情况都未返回默认的super.xxxTouchEvent的情况。

Activity:如果Activity的dispatchTouchEvent没调用super.dispatchTouchEvent那么Touch事件在此就终结了,后面将不会有任何和Touch有关的方法被调用。

所以说如果重写Activity的dispatchTouchEvent那么一定要调用super.dispatchTouchEvent,除非你不打算让Touch事件向下传递。Activity的dispatchTouchEvent方法的返回值并不会影响Touch事件后续调用。所以返回true,false好像无所谓。

ViewGroup:如果ViewGroup的dispatchTouchEvent没调用super.dispatchTouchEvent并且返回true那么Touch事件在此就终结了,后面将不会有任何和Touch有关的方法被调用。如果返回false那么父View的onTouchEvent将被调用。   如果调用super.dispatchTouchEvent并且返回值为true那么父View的onTouchEvent将不会被调用。View同理

onInterceptTouchEvent如果返回值为true则表示Touch事件被拦截,子View的dispatchTouchEvent将不会被调用。该方法默认返回false,表示子View的dispatchTouchEvent将会被调用。

onTouchEvent该方法表示触发了Touch事件。如果返回true则表示该事件当前View已经处理完了,父View不用管了。

如果重写了onTouchEvent但又没有调用super.onTouchEvent那么将会影响当前View的OnClickListener等事件的触发。

总结

  1. dispatchTouchEvent/onTouchEvent任意一个返回true那么事件在此终结。父View的onTouchEvent将不会被调用。

  2. super.dispatchTouchEvent用来调用子View的dispatchTouchEvent和自己的onTouchEvent

  3. super.onTouchEvent用来调用自己的OnClickListener等事件。

  4. onInterceptTouchEvent的返回值用来表示是否拦截传递给子View的事件。true表示子View的dispatchTouchEvent不被调用。

  5. 如果当前的View或ViewGroup有OnClickListener等方法那么Touch将在此终结不管dispatchTouchEvent/onTouchEvent的返回值未何。

© 著作权归作者所有

o
粉丝 2
博文 175
码字总数 74030
作品 0
私信 提问
ui事件冲突,取消拦截父控件的事件拦截

当手指触摸到屏幕时,系统就会调用相应View的onTouchEvent,并传入一系列的action。当有多个层级的View时,在父层级允许的情况下,这个action会一直向下传递直到遇到最深层的View。所以touch...

Carbenson
2016/11/24
74
0
Android的Touch系统简介(一)

一、Android touch事件的相关概念 用户的Touch事件被包装成MotionEvent 用户当前的touch事件主要类型有: ACTION_DOWN: 表示用户开始触摸. ACTION_MOVE: 表示用户在移动(手指或者其他) ACTIO...

JayPark不作死
2014/11/11
0
0
Android 事件分发机制源码解析-view层

本篇文章我们专门来研究一下view层的事件分发机制,我们在学习过程中总会碰到关于事件分发的各种问题,如onTouch和onTouchEvent的关系,setOnTouchListener和setOnClickListener的关系等等,...

ostracod
2018/06/29
0
0
Android中父View和子view的点击事件的执行过程

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

火云
2015/06/11
0
0
笔记KeyEvent 和 TouchEvent在 Activity和View中传递的顺序

由于一个电视机 Key事件传递出现了部分问题,但是五位方向键有时候出现问题 所以使用Activity完全接管了key事件的传递, 自己来控制焦点的变化和五位方向键的按下处理逻辑 在此温习一下key事件...

SuShine
2015/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解决vim打开之后乱码的问题

在Windows中的文档,传输到Linux系统中(使用rz命令),出现乱码 root@localhost ~]# rpm -qf `which iconv` glibc-common-2.17-105.el7.x86_64 [root@localhost ~]# rpm -ihv /mnt/Packages......

寰宇01
16分钟前
0
0
aldi 2017年1月记录

../../tools/CBLAS/lib/cblas_LINUX.a ../../tools/lapack-3.4.2/liblapacke.a \../../tools/lapack-3.4.2/librefblas.a -lgfortran \../../tools/lapack-3.4.2/liblapack.a \../../......

MtrS
18分钟前
0
0
Choerodon如何进行日志收集与告警

作者:董文启 应用程序日志是由软件应用程序记录的事件文件, 它一般包含错误,信息事件和警告。一个良好的日志系统有助于快速发现问题,定位问题,同时也为业务分析起到一定的作用。 传统E...

Choerodon
29分钟前
1
0
js二维码生成插件“jquery.qrcode.min.js”

<!doctype html> <html> <head> <meta charset="utf-8" /> <title>生成二维码</title> <script type='text/javascript' src='http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js'></scri......

泉天下
33分钟前
0
0
Spring AOP之同一个对象方法内部自调用导致事务失效问题

对于像我这种喜欢滥用AOP的程序员,遇到坑也是习惯了,不仅仅是事务,其实只要脱离了Spring容器管理的所有对象,对于SpringAOP的注解都会失效,因为他们不是Spring容器的代理类,SpringAOP,就切入不...

xiaomin0322
39分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部