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

转载 2016年08月31日 14:22:07

Android中触摸事件传递过程中最重要的就是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法,这是一直困扰的问题之一,这里记录一下dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()处理过程。

dispatchTouchEvent()是处理事件分发,事件是从Activity的dispatchTouchEvent开始的,执行super.dispatchTouchEvent(event)向下分发。

onInterceptTouchEvent是ViewGroup提供的方法,默认返回false,返回true表示拦截。

onTouchEvent是View中提供的方法,ViewGroup也有这个方法,view中不提供onInterceptTouchEvent,view中默认返回true,表示消费了这个事件。


View里面有两个回调函数:

public boolean dispatchTouchEvent(MotionEvent ev);
public boolean onTouchEvent(MotionEvent ev);

ViewGroup里面有三个回调函数:

public boolean dispatchTouchEvent(MotionEvent ev);
public boolean onInterceptTouchEvent(MotionEvent ev);
public boolean onTouchEvent(MotionEvent ev):


在Activity里面有两个回调函数:

public boolean dispatchTouchEvent(MotionEvent ev);
public boolean onTouchEvent(MotionEvent ev);



Android中,默认情况下是由最终的view接受到,传递过程是从父布局到子布局,也就是从Activity到ViewGroup到View 的过程,默认情况,ViewGroup起到的是透传作用。

Android中事件传递过程(按照箭头方向)如下图:



触摸事件是一连串ACTION_DOWN、ACTION_MOVE、最后ACTION_UP,触摸事件还有ACTION_CANCEL事件。

事件都是从ACTION_DOWN开始的,Activity的dispatchTouchEvent()首先接收到ACTION_DOWN,执行super.dispatchTouchEvent(ev),进行事件分发。

dispatchTouchEvent()返回true,后续事件(ACTION_MOVE、ACTION_UP)才会传递,如果返回false,dispatchTouchEvent就不会接收到后续事件。

下面几张参考图:


ACTION_DOWN都没有被消费。










android中的Touch事件都是从ACTION_DOWN开始的:

单手指操作:ACTION_DOWN——ACTION_MOVE——ACTION_UP

多手指操作:ACTION_DOWN——ACTION_POINTER_DOWN——ACTION_MOVE——ACTION_POINTER_UP——ACTION_UP

View的onInterceptTouchEvent(MotionEvent ev)和dispatchTouchEvent(MotionEvent ev) 解析

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

Activity间通过Intent传递数据的大小限制。

http://blog.csdn.net/pingfangx/article/details/52093225 这个问题没找到官方说明,针对网上的各种答案,自己实际测试了一下。 0x0...

android View属性之dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent

前言:辞职也一周了,在家里宅了5天,找了两工作,找得人心灰意冷的,一点信心都没有。宅在家里连游戏都不打了,看起动漫来了,在这里强烈推荐一部动漫《Re:从零开始的异世界生活》,把男主角虐待,绝对值得你看...

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

一、概述:Android中触摸事件传递过程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法。这个是困扰初学者的问题...
  • lovoo
  • lovoo
  • 2016年06月20日 22:58
  • 253

android事件之onInterceptTouchEvent,dispatchTouchEvent,onTouchEvent,requestDisallowInterceptTouchEvent

android 的这个事件传递的解决方式, 实质应该是 java设计模式里面的 责任链模式了。在这里,想用最少的话,最通俗易懂的方式记录 View的方法 // 事件分发,默认返回false p...

Android的事件分发(dispatchTouchEvent),拦截(onInterceptTouchEvent)与处理(onTouchEvent)

在Android中,View的结构是树状的,所以,当触发触摸事件的时候,其事件传递也是从上之下一层层的传递。下面我们结合例子来一点点进行分析。 首先,我们需要了解事件处理中的几个方法: 1、在View...

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

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

Android onTouchEvent,dispatchTouchEvent,onInterceptTouchEvent分析

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

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

转自:     Android中触摸事件传递过程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法...

验证Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)

http://blog.csdn.net/yanzi1225627/article/details/22592831 看过这篇微博之后,好像他贴的ViewGroup那部分日志结果有点问题,为了确定结果...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
举报原因:
原因补充:

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