最近和队友做了个微博发送助手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的话,事件将会冒泡向上传.

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

贴一张图出来

Android中Touch事件的处理_第1张图片


这里还要说几句的是:

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

你也不会有权限去处理

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

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


更多相关文章

  1. C语言函数以及函数的使用
  2. Xposed框架之函数Hook学习
  3. Android03_事件处理
  4. android 事件流转机制
  5. 【android基础】之Android返回键处理(事件)
  6. Android事件分发

随机推荐

  1. Android判断横屏竖屏代码
  2. Android Studio v1.0 项目无法运行
  3. Android Unable to find instrumentation
  4. Android使用Aidl实现跨进程通信
  5. android 静默安装 卸载 资料汇总
  6. 在Linux下Android编译中修改Java的环境
  7. 浅析 - Android(安卓)ContentProvider用
  8. Android中activity触摸操作dispatchTouch
  9. android 事件处理机制
  10. Android boot process stub