【Android学习笔记】onInterceptTouchEvent()、onTouchEvent()

转载 2012年03月31日 17:54:17

转自:http://www.cnblogs.com/hundan/archive/2011/08/27/2155442.html

一、资源:

MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序

ANDROID事件触发机制,针对于由于触摸(Touch)而触发的事件。

二、重点

  • 首先要明确onInterceptTouchEvent()这个方法只针对于ViewGroup,事件传到ViewGroup一般先触发onInterceptTouchEvent(),View是没有这个方法的
  • 具体传递的流程见资源1,很详细,对理解很有帮助
  • onInterceptTouchEvent()改变事件传递的方向
    • false->下一个对象
    • true->本对象
  • onTouchEvent() 用于处理事件,返回值决定当前控件是否消费(consume)了这个事件。
    • false->继续下一步处理
    • true->已经消费,不继续处理

三、问题思考

1、是不是无论哪种情况下,最后一个发生的onTouchEvent()的返回值均为true?

我做了试验,onTouchEvent()和onTouchEvent()均返回false情况,一个滑动手势只捕捉到了ACTION_DOWN

所以我认为android应该是有个机制,让顶部有效的onTouchEvent自定返回true,按照资源1的描述看来,此后的时间信息都直接传给了最顶部的有效onTouchEvent()处理了。

若顶部有效的onTouchEvent自定返回false的话,那么开始的信息得不到消费,比如Action_DOWN,那后面的动作也没办法触发啊!


2、我感觉onInterceptTouchEvent()其实只能处理Action_DOWN,因为我觉得问题1正确的话,此后的Action_UP,Action_MOVE都会被最后一个有用的onTouchEvent截取?

理由同问题描述,信息最后都汇总到返回true的onTouchEvent哪里,onInterceptTouchEvent()根本没有机会啊。

但是在一些程序中,我确实看到了onInterceptTouchEvent()截取了ACTION_MOVE,ACTION_UP等操作,如何实现的,不解!!

3、实现左右两个屏幕的切换

“我研究了下。 需要往 screen 加 onclick事件,才能两个屏幕这样切换。 没弄懂onInterceptTouchEvent。 为什么要加 onclick呢,因为如果不加,那么 onInterceptTouchEvent return false 也是直接执行 onTouchEvent 而不是继续执行 onInterceptTouchEvent 如果加了onclick,那么 onInterceptTouchEvent return false 会直接执行 onInterceptTouchEvent。 求解答。”

首先得明确onInterceptTouchEvent()是ViewGroup的方法,不是View的方法!
前半句好理解:设当前ViewGroup称为Parent,点击的子View为Child,
所以就算 onInterceptTouchEvent return false它也只能触发Child和Parent的onTouchEvent, 你那个时候Parent.onTouchEvent返回的应该也是true,此后的动作都直接传到Parent.onTouchEvent

后半句无法理解,onclick在onTouchEvent中的ACTION_UP实现(参见下一篇),如果问题1的成立,那么后面的ACTION_MOVE,ACTION_UP都传不到非顶层的函数,所以说问题1是症结所在!!

 

android自定义粘性控件,综合使用measure,layout,onTouchEvent,onInterceptTouchEvent等方法

android自定义粘性控件,综合使用measure,layout,onTouchEvent,onInterceptTouchEvent等方法...

Android中事件分发处理MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序【转】

MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序不小心看到一篇博客讲解了事件分发的处理感觉讲的挺好的,在这里转载学习一下 onIn...

浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解

From:http://www.jb51.net/article/35800.htm

android onTouchEvent和onInterceptTouchEvent区别

最近师兄让我分析下onTouchEvent和onInterceptTouchEvent的区别,在网上查找了很多资料,但发现自己测试的结果和他们说的有不一样的地方,当所有的onTouchEvent和on...

android的Touch事件解析(dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent)

android的Touch事件解析(dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent) (2012-05-20 12:34:04) 转载▼...

android触摸消息处理和传递:onInterceptTouchEvent与onTouchEvent

大三了,正在找实习和准备考研中挣扎,但每天yeyeo这些天参加了不少android

Android onTouchEvent,dispatchTouchEvent,onInterceptTouchEvent分析

本文主要通过先demo分析讲解 onTouchEvent,dispatchTouchEvent,onInterceptTouchEvent这三者在事件点击过程中的处理关系。demo分别自定义一个Te...

Android - onInterceptTouchEvent()与onTouchEvent()的区别

1、onInterceptTouchEvent()是用于处理事件(类似于预处理、当然也可以不处理)并改变事件的传递方向 也就是决定是否允许Touch事件继续向下(子view)传递、一但返回True(代...

Android入门:onInterceptTouchEvent和onTouchEvent调用时序详解 .

onInterceptTouchEvent ()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,...

Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

转自:     Android中触摸事件传递过程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Android学习笔记】onInterceptTouchEvent()、onTouchEvent()
举报原因:
原因补充:

(最多只允许输入30个字)