- 浏览: 120468 次
- 性别:
- 来自: 广州
文章分类
最新评论
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()。
PS:这里发现ViewGroup::onTouchEvent()也被调用了,原因是View::onTouchEvent()没有处理该事件(返回false),事件将交给父容器处理。
返回true:
表示ViewGroup将拦截子View的Touch事件。事件会直接传递到ViewGroup::onTouchEvent()处理。
也就是说,事件后面的移动、抬起动作不会经过onInterceptTouchEvent(),而是直接传到onTouchEvent()。
2、ViewGroup/View的onTouchEvent()
返回true:
表示事件按下动作被处理,意味着事件的移动、抬起等后续动作将会传到此方法。
如果是View处理,那么ViewGroup的onTouchEvent()将不会获得该事件。
PS:只要onInterceptTouchEvent()返回false,而且目标控件View::onTouchEvent()返回true,那么事件的每一个动作(按下、移动、抬起等)会都会首先传递到onInterceptTouchEvent()中。
如果是ViewGroup处理,那么Activity不会获得事件。
返回false:
表示View或ViewGroup不处理事件,系统将把事件传递给其父级处理。
如果View返回false,那么将由其父容器ViewGroup处理。如果ViewGroup不处理,最终将交给Activity来处理。
如果ViewGroup返回false,将交给最后一级Activity来处理。
3、Activity的onTouchEvent()
这个方法是事件最后被处理的地方。如果不处理,系统将抛弃这个事件。暂时没有发现这个方法的返回值对程序有什么意义。也许返回true能告诉系统事件被处理了。
小提示:
不要直接在程序中调用事件的回调方法。可以使用dispatchTouchEvent(MotionEvent)来分发事件。
DEMO:http://code.google.com/p/android-custom-view/downloads/list
发表评论
文章已被作者锁定,不允许评论。
-
stopSelf()与stopSelf(startId)的区别
2016-04-14 14:44 1106startId:表示启动服务的次数 stopSelf(sta ... -
安装/卸载/替换成功广播接收
2016-01-08 11:59 789<receiver android:name=" ... -
ContentProivder
2015-12-09 09:26 486ContentProvider 我们实现了其中的几个方法 ... -
Android获取网络时间
2015-11-19 11:27 11751、实时获取: LocationManager locatio ... -
android animation知识
2015-11-14 11:47 574<?xml version="1.0" ... -
代码中设置android:drawableTop等
2015-11-14 10:42 1016btnAttachment.setCompoundDrawab ... -
自定义View
2015-11-04 15:09 400一般来说,自定义View都会去重写onMeasure()方法, ... -
SimpleOnGestureListener
2015-11-04 12:03 539onScroll()缓慢滑动,手指滑动屏幕的过程中执行; on ... -
设置dialog在底部并宽度全屏显示
2015-11-02 11:53 2288pickerDialog.setContentView(vie ... -
横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效
2015-10-29 10:51 1778在之前的版本中都是在Manifest文件中设置Activity ... -
Dialog注意点
2015-10-28 17:14 510dialog:setCancelable与setCancele ... -
清除setBackgroundResource的原有值
2015-10-23 16:50 1157setBackgroundResource(0);清除原有的s ... -
接收隐式意图
2015-10-22 11:29 543想接收隐式意图,必须在他们的意图过滤器中配有:android. ... -
严苛模式
2015-10-14 20:25 1373//启用严苛模式,StrictMode可以用于捕捉发生在应用程 ... -
Android使用Animation完成动画保留最后一帧的办法
2015-09-08 10:43 2417在动画效果的xml中,在set标签中加上一条android:f ... -
控件getHeight和getWidth等于0的解决办法
2015-09-07 17:27 1420//监听layoutContainer是否初始化完成 l ... -
Service和Thread的区别?
2015-08-19 13:25 494servie是系统的组件,它由系统进程托管(servicema ... -
避免内存泄露
2015-08-18 19:21 4791、尽量避免在Activity使用static。 2、能使用A ... -
需要context的时候用activity还是application?
2015-08-17 17:02 747需要context的时候用activity还是applicat ... -
谈谈UI中, Padding和Margin有什么区别?
2015-08-10 17:18 1097Padding 文字对边框, margin是控件与控件之间的距 ...
相关推荐
本文将深入解析Android的Touch事件传递机制,并结合源码进行详细阐述。 首先,Android的触摸事件主要包括ACTION_DOWN、ACTION_UP、ACTION_MOVE、ACTION_CANCEL和ACTION_POINTER_DOWN/UP等几种类型。当用户触摸屏幕...
在Android系统中,事件传递机制是用户界面交互的核心部分,主要处理用户与屏幕的各种触摸操作。这个机制确保了用户点击屏幕时,相应的视图能够正确地接收到并响应这些事件。我们今天将深入探讨Android的触摸事件...
在Android系统中,触摸事件(Touch Events)是用户与设备交互的主要方式,它涉及到了复杂的事件传递机制。本文将深入探讨Android的触摸事件处理流程,包括事件的产生、分发以及处理过程,以实例的形式帮助开发者理解...
本文将深入探讨Android事件传递机制,并结合提供的"TestTouch"测试代码进行解析。 Android事件传递机制主要围绕着触摸事件(MotionEvent)展开,当用户在屏幕上进行点击、滑动等操作时,这些动作会转化为一系列的...
本文将深入探讨“android之Touch事件处理机制测试”,包括滑动事件冲突的解决、ViewGroup中的事件触发和传递机制。 一、Android Touch事件处理机制 1. 触摸事件流程:在Android中,触摸事件分为三个阶段,即ACTION...
本文将深入探讨Android事件分发机制,特别是触摸事件(Touch事件)的处理流程。 首先,我们要理解Android事件的产生过程。当用户与设备交互,如点击屏幕或按下物理按键时,硬件会生成相应的事件,这些事件由Android...
本文将深入解析Android的Touch事件分发机制,并通过一个名为"EventDispatchTest"的示例来说明。 1. **事件分发流程** Android中的触摸事件分发分为三个阶段:`dispatchTouchEvent()`, `onInterceptTouchEvent()`, ...
总结来说,Android中的Touch事件传递涉及到了Activity的布局加载、DecorView和ViewGroup的事件分发机制以及事件拦截。通过理解这些机制,开发者可以编写出更加合理和高效的事件处理代码,以优化用户界面的响应性和...
在Android开发中,事件分发机制是理解和优化用户交互界面不可或缺的部分。...通过实践`android事件分发机制Demo`,你可以直观地看到事件如何在View和ViewGroup之间传递,从而加深对这一机制的理解。
下面将详细阐述Android中的事件传递机制以及在“ViewsDemo”项目中可能涉及的相关知识点。 1. 触摸事件概述 Android系统通过MotionEvent类来表示用户的触摸行为,如按下、移动和释放等。这些事件由系统按照一定的...
在Android开发中,事件分发机制是理解和优化用户交互界面不可或缺的部分。本文将深入探讨“Android事件分发机制总结Demo”,结合代码实例MyTouchEventDemo,帮助开发者清晰理解这一核心概念。 事件分发机制主要涉及...
在Android开发中,View事件传递机制是理解和优化用户交互界面不可或缺的部分。本Demo源码着重展示了这一机制,旨在帮助开发者深入理解并应用到实际项目中。以下是对这一主题的详细阐述。 首先,我们要知道Android中...
在Android系统中,事件分发机制是用户与应用交互的核心环节,主要涉及到触摸事件的传递、处理和响应。本文将详细解析Android事件分发机制的第三部分:事件分发和消费,帮助开发者深入理解这一关键过程。 事件分发...
touch机制好好看了一下,呵呵。。android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:1)publicbooleandispatchTouchEvent(MotionEvent ev)这个方法用来分发TouchEvent2)...
在Android系统中,事件分发机制是用户与应用程序交互的核心环节,主要处理各种触摸事件(如点击、滑动等)。事件分发涉及到Activity、ViewGroup和View三个层次,确保触摸事件能够准确地传递到目标视图进行处理。下面...
在Android开发中,点击事件的处理是用户交互的基础,它涉及到Android事件分发机制的核心概念。...在TestTouch这个测试项目中,我们可以实践这些理论,通过编写代码来验证和理解Android事件分发的工作原理。
在Android开发中,触摸事件(Touch Event)是用户与设备交互的重要部分,它涉及到Activity、View及ViewGroup之间复杂的事件分发机制。本篇将深入探讨Android中的触摸事件处理,包括事件的产生、分发、拦截以及如何...
总结来说,"android测试Touch事件DEMO"是一个用于教学和实践的实例,它涵盖了Android中触摸事件的基本处理、事件分发以及自定义日志记录,对于理解和掌握Android触摸事件机制非常有帮助。通过这个DEMO,开发者可以...