`

【转】Android事件传递机制【Touch事件】

阅读更多

Android中提供了ViewGroup、View、Activity三个等级的Touch事件处理。也就是说,这三个地方都有事件回调方法。Android事件传递机制【按键事件】

测试DEMO视图结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<com .orgcent.eventtest.EventLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="#032d3d"
   android:orientation="vertical" >
    <com .orgcent.eventtest.EventTextView
       android:id="@+id/tvEvent"
       android:layout_width="fill_parent"
       android:layout_height="100dp"
       android:gravity="center"
       android:textColor="@android:color/black"
       android:background="@android:color/white"
       android:text="Activity - ViewGroup - View Event http://orgcent.com dispatch Test"/>
</com>

至于三者之间的执行顺序,将在下面详细阐述:

整体上看,事件传递顺序为ViewGroup::onInterceptTouchEvent() –> ViewGroup或View的onTouchEvent() –> Activity::onTouchEvent()

由于上面每个事件回调方法的返回值不同,导致事件本身及顺序发生微妙变化。下面以返回值为主线来详细阐述:

需要注意以下两点:
1、onInterceptTouchEvent()返回true,那么这个方法只会拦截动作ACTION_DOWN。
2、onInterceptTouchEvent()负责事件分发(事件传递方向),onTouchEvent()负责事件处理(消费)。

1、ViewGroup的onInterceptTouchEvent()
返回false:
默认实现方式。事件(按下、移动、抬起等)将直接传递给目标view(用户触摸的view)。
在ViewGroup触发,调用ViewGroup::onTouchEvent(),在View触发,调用View::onTouchEvent()。

androi-touch-event-1
PS:这里发现ViewGroup::onTouchEvent()也被调用了,原因是View::onTouchEvent()没有处理该事件(返回false),事件将交给父容器处理。

返回true:
表示ViewGroup将拦截子View的Touch事件。事件会直接传递到ViewGroup::onTouchEvent()处理。
也就是说,事件后面的移动、抬起动作不会经过onInterceptTouchEvent(),而是直接传到onTouchEvent()。

androi-touch-event-2

2、ViewGroup/View的onTouchEvent()
返回true:
表示事件按下动作被处理,意味着事件的移动、抬起等后续动作将会传到此方法。
如果是View处理,那么ViewGroup的onTouchEvent()将不会获得该事件。

androi-touch-event-3
PS:只要onInterceptTouchEvent()返回false,而且目标控件View::onTouchEvent()返回true,那么事件的每一个动作(按下、移动、抬起等)会都会首先传递到onInterceptTouchEvent()中。

如果是ViewGroup处理,那么Activity不会获得事件。
androi-touch-event-4

返回false:
表示View或ViewGroup不处理事件,系统将把事件传递给其父级处理。

如果View返回false,那么将由其父容器ViewGroup处理。如果ViewGroup不处理,最终将交给Activity来处理。
androi-touch-event-5

如果ViewGroup返回false,将交给最后一级Activity来处理。
androi-touch-event-6

3、Activity的onTouchEvent()
这个方法是事件最后被处理的地方。如果不处理,系统将抛弃这个事件。暂时没有发现这个方法的返回值对程序有什么意义。也许返回true能告诉系统事件被处理了。

小提示:
不要直接在程序中调用事件的回调方法。可以使用dispatchTouchEvent(MotionEvent)来分发事件。

DEMO:http://code.google.com/p/android-custom-view/downloads/list

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android Touch事件传递机制解析

    本文将深入解析Android的Touch事件传递机制,并结合源码进行详细阐述。 首先,Android的触摸事件主要包括ACTION_DOWN、ACTION_UP、ACTION_MOVE、ACTION_CANCEL和ACTION_POINTER_DOWN/UP等几种类型。当用户触摸屏幕...

    Android事件传递机制

    在Android系统中,事件传递机制是用户界面交互的核心部分,主要处理用户与屏幕的各种触摸操作。这个机制确保了用户点击屏幕时,相应的视图能够正确地接收到并响应这些事件。我们今天将深入探讨Android的触摸事件...

    android Touch事件传递机制

    在Android系统中,触摸事件(Touch Events)是用户与设备交互的主要方式,它涉及到了复杂的事件传递机制。本文将深入探讨Android的触摸事件处理流程,包括事件的产生、分发以及处理过程,以实例的形式帮助开发者理解...

    Android事件传递机制测试代码

    本文将深入探讨Android事件传递机制,并结合提供的"TestTouch"测试代码进行解析。 Android事件传递机制主要围绕着触摸事件(MotionEvent)展开,当用户在屏幕上进行点击、滑动等操作时,这些动作会转化为一系列的...

    android之Touch事件处理机制测试

    本文将深入探讨“android之Touch事件处理机制测试”,包括滑动事件冲突的解决、ViewGroup中的事件触发和传递机制。 一、Android Touch事件处理机制 1. 触摸事件流程:在Android中,触摸事件分为三个阶段,即ACTION...

    android事件分发机制

    本文将深入探讨Android事件分发机制,特别是触摸事件(Touch事件)的处理流程。 首先,我们要理解Android事件的产生过程。当用户与设备交互,如点击屏幕或按下物理按键时,硬件会生成相应的事件,这些事件由Android...

    Android Touch事件分发机制代码一

    本文将深入解析Android的Touch事件分发机制,并通过一个名为"EventDispatchTest"的示例来说明。 1. **事件分发流程** Android中的触摸事件分发分为三个阶段:`dispatchTouchEvent()`, `onInterceptTouchEvent()`, ...

    Android中Touch事件的传递

    总结来说,Android中的Touch事件传递涉及到了Activity的布局加载、DecorView和ViewGroup的事件分发机制以及事件拦截。通过理解这些机制,开发者可以编写出更加合理和高效的事件处理代码,以优化用户界面的响应性和...

    android事件分发机制Demo

    在Android开发中,事件分发机制是理解和优化用户交互界面不可或缺的部分。...通过实践`android事件分发机制Demo`,你可以直观地看到事件如何在View和ViewGroup之间传递,从而加深对这一机制的理解。

    android 事件传递demo

    下面将详细阐述Android中的事件传递机制以及在“ViewsDemo”项目中可能涉及的相关知识点。 1. 触摸事件概述 Android系统通过MotionEvent类来表示用户的触摸行为,如按下、移动和释放等。这些事件由系统按照一定的...

    Android事件分发机制总结Demo

    在Android开发中,事件分发机制是理解和优化用户交互界面不可或缺的部分。本文将深入探讨“Android事件分发机制总结Demo”,结合代码实例MyTouchEventDemo,帮助开发者清晰理解这一核心概念。 事件分发机制主要涉及...

    View事件传递机制Demo源码

    在Android开发中,View事件传递机制是理解和优化用户交互界面不可或缺的部分。本Demo源码着重展示了这一机制,旨在帮助开发者深入理解并应用到实际项目中。以下是对这一主题的详细阐述。 首先,我们要知道Android中...

    Android事件分发机制(三)事件分发和消费

    在Android系统中,事件分发机制是用户与应用交互的核心环节,主要涉及到触摸事件的传递、处理和响应。本文将详细解析Android事件分发机制的第三部分:事件分发和消费,帮助开发者深入理解这一关键过程。 事件分发...

    AndroidTouch事件传递机制解析

    touch机制好好看了一下,呵呵。。android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:1)publicbooleandispatchTouchEvent(MotionEvent ev)这个方法用来分发TouchEvent2)...

    Android事件分发机制

    在Android系统中,事件分发机制是用户与应用程序交互的核心环节,主要处理各种触摸事件(如点击、滑动等)。事件分发涉及到Activity、ViewGroup和View三个层次,确保触摸事件能够准确地传递到目标视图进行处理。下面...

    [android][Android点击事件分发机制分析]

    在Android开发中,点击事件的处理是用户交互的基础,它涉及到Android事件分发机制的核心概念。...在TestTouch这个测试项目中,我们可以实践这些理论,通过编写代码来验证和理解Android事件分发的工作原理。

    Android深入研究Touch事件demo

    在Android开发中,触摸事件(Touch Event)是用户与设备交互的重要部分,它涉及到Activity、View及ViewGroup之间复杂的事件分发机制。本篇将深入探讨Android中的触摸事件处理,包括事件的产生、分发、拦截以及如何...

    android测试Touch事件DEMO

    总结来说,"android测试Touch事件DEMO"是一个用于教学和实践的实例,它涵盖了Android中触摸事件的基本处理、事件分发以及自定义日志记录,对于理解和掌握Android触摸事件机制非常有帮助。通过这个DEMO,开发者可以...

Global site tag (gtag.js) - Google Analytics