`
mmdev
  • 浏览: 13311207 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android中Touch事件的处理

 
阅读更多

最近和队友做了个微博发送助手Fuubo(http://bbs.meizu.com/viewthread.php?tid=3428815&highlight=),

由于主要是做前台,所以当中碰到了很多蛋疼的东西,做过android的人都知道前台是android的硬伤,在

android应用层做得很好的人前台功底都是很强的,这里就我对处理前台动画时对android的touch事件

的一些体会心得给大家分享下,如果有错误的地方希望大家提出.


Android的四大组件中Activity我们可以认为是Android中的容器,在它里面你可以装很多的view,然后

助view将我们希望看到的界面显示出来.下面主要借助touch事件中主要的几个函数说下当一次touch事

件到来的时候android框架到底做了哪些事情.


在说那几个函数之前我想先啰嗦几句,简要说下android系统在载入一个app时view系统做了哪些事情:

首先android框架会将整个app的view构造一棵树,然后从view树的root开始,递归调用子view的onMeasure

方法,开始第一次遍历,从而算出每一个view的大小,接着进行第二次遍历,递归调用子view的onLayout

,从而算出每一个view的位置信息,第三次遍历就很明显了,利用前面已经计算出来的大小和位置信息,

递归调用每个view的onDraw方法,将各自画出来.现在继续回到touch事件的几个函数上来.


1.dispatchTouchEvent:当一次touch事件到来的时候,事件从activity中流出,最上层的view中的dispatch函数得

了事件的处理权,它如果返回true即代表自己要处理这个事件,那么事件将不会往下传,而是继续等待下

一次事件的到来,如果返回false则代表自己想分配给其他函数来处理,此时该view的interceptTouchEvnet

函数将会获得事件处理权.

2.interceptTouchEvnet:事件流出到该函数的时候,我们同样有两种选择,如果返回true则告诉系统自己想处理

次事件,那么事件将交给onTouchEvent函数处理;如果我们返回false的话则代表我们想将事件交给下层

view来处理,此时事件会流出给下一层view的dispatchTouchEvent,并进入递归

3.onTouchEvent:事件来到此函数的时候,一样的我们可以返回true,表示自己想处理这个事件,并处理这个事

件,时等待下一次事件到来,如果返回false,我们要分情况来看,如果是上层的view则会将该次事件丢弃,

表示该app不想处理这次事件,如果是下层view的话,事件将会冒泡向上传.

相信听到这里可能有点晕了,因为最近比较忙,就没有贴测试代码了,不过为了让大家有一个清晰的印象,

贴一张图出来


这里还要说几句的是:

1.每一次触屏事件都是从down开始的时候,如果down事件你没有处理权的话,后面的move,up等事件

你也不会有权限去处理

2.在默认情况下,android尽量让最下层的view去处理touch事件,之后才会慢慢冒泡去让上层view处理

如果大家想看官方解说,可以到这里看http://developer.android.com/reference/android/view/View.html


分享到:
评论

相关推荐

    android之Touch事件处理机制测试

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

    Android中Touch事件的传递

    Android中的Touch事件传递是一个涉及多个组件和层次的过程。为了深刻理解这一过程,我们首先需要了解Activity界面的布局结构,然后深入到事件的传递与处理流程中,最后通过流程图来展示整个事件的传递顺序。 在...

    Android Touch事件传递机制解析

    在Android系统中,触摸事件(Touch Event)是用户与设备交互的重要方式,它涉及到了UI控件的响应和处理。本文将深入解析Android的Touch事件传递机制,帮助开发者理解这一核心概念。 首先,我们了解下Android中的...

    android测试Touch事件DEMO

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

    Android判断touch事件点是否在view范围内的方法

    在Android应用开发中,处理触摸事件(touch event)是至关重要的,因为它允许用户与界面进行交互。本篇文章将深入探讨如何判断一个触摸事件点是否在指定的View范围内,以及涉及的相关事件响应和View属性操作。 首先...

    android Touch事件传递机制

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

    Android Touch事件分发机制代码一

    在Android系统中,触摸事件的分发是UI交互的核心部分,它涉及到Activity、ViewGroup和View之间的协同工作。本文将深入解析Android的Touch事件分发机制,并通过一个名为"EventDispatchTest"的示例来说明。 1. **事件...

    Android深入研究Touch事件demo

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

    Android Touch事件rawX,rawY与x,y的区别

    本文将深入探讨Android Touch事件中`rawX`、`rawY`与`x`、`y`的区别,帮助开发者更好地理解和处理触摸事件。 首先,`MotionEvent`是Android系统用于表示触摸事件的数据类,它包含了与触摸屏幕相关的各种信息,如...

    Android的Touch事件处理机制介绍

    Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后。 Android的Touch事件处理分3个层面:Activity层,ViewGroup层,View层。 首先说一下Touch事件处理的几条基本规则。 如果在某个层级...

    Android-ForceTouch在Android中的简单实现

    **Android-ForceTouch在Android中的简单实现** Force Touch技术,起源于Apple的iPhone,并逐渐被引入到Android系统中,为用户界面带来了全新的交互体验。它能够感知用户触摸屏幕时的压力变化,通过不同的按压力度来...

    android soundtouch demo

    Android SoundTouch库是一个强大的音频处理库,主要专注于音高、速度和节奏的改变,而不会改变声音的品质。这个“android soundtouch demo”是专为Android平台设计的,展示了如何在Windows环境下使用Cygwin工具链...

    android touch事件及触屏简单的应用

    在Android开发中,触摸事件(Touch Events)是用户与设备交互的重要方式,特别是对于移动设备而言,触屏操作是用户最直接的操作手段。本篇主要介绍Android中的触摸事件处理机制以及如何实现一个简单的触屏画图应用。...

    android 关于touch demo

    在Android开发中,触摸事件(Touch Events)是用户与设备交互的重要方式,特别是对于移动应用而言。本示例"android 关于touch demo"主要关注如何处理`onTouch`事件,尤其是如何判断用户的上下移动操作。在Android中...

    android touch demo

    `android touch demo`是一个用于演示Android系统中触摸事件处理的示例项目,通过这个项目,我们可以深入理解Android触摸事件的工作原理以及如何在应用中实现对触摸事件的响应。 触摸事件主要由三类基本事件组成:...

    android Touch触发事件的生命周期

    本篇将深入解析“android Touch触发事件的生命周期”,着重讨论ViewGroup中点击事件的`dispatchTouchEvent()`, `onInterceptTouchEvent()`, 和`onTouchEvent()`这三个关键方法之间的关系及其工作流程。 首先,我们...

    android4.0 input touch分析

    * EventHub:它是系统中所有事件的中央处理站,管理所有系统中可以识别的输入设备的输入事件。当设备增加或删除时,EventHub 将产生相应的输入事件给系统。EventHub 通过getEvents 函数,给系统提供一个输入事件流。...

    Qt for android触摸手势事件QGestureEvent

    在本文中,我们将深入探讨如何在Qt for Android环境中利用QGestureEvent处理触摸手势事件。Qt是一个跨平台的应用程序开发框架,支持多种操作系统,包括Android。它提供了丰富的功能,使开发者能够在移动设备上创建...

Global site tag (gtag.js) - Google Analytics