Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114447
  • 博文数量: 83
  • 博客积分: 2531
  • 博客等级: 少校
  • 技术积分: 865
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-31 20:40
文章分类

全部博文(83)

文章存档

2011年(7)

2010年(76)

我的朋友

分类: Java

2010-10-20 10:37:51

 

ViewGroup类的onInterceptTouchEvent(MotionEvent ev)分析

实现这个方法去拦截所有的屏幕手势动作事件。这允许你去查看这些事件当它们被分发到ViewGroup的下一级view,并且在任何一点能拥有当前的手势。

使用这个方法要注意:它与View.onTouchEvent(MotionEvent)方法有相当复杂的交互,使用它必须要同样正确的实现这个方法。事件将会以下面的顺序到达:

1、  你将会在这里接收到down事件

2、  Down事件或者被该viewGroup的一个child处理,或者将被给到viewGroup自己的onTouchEvent()方法来处理。这意味着你应该实现onTouchEvent()从而可以返回true,所以你将继续看到剩余的手势(而不是寻找一个parent view去处理它)。并且,通过从onTouchEvent()返回true,你将不会在onInterceptTouchEvent()中接收到以下任何事件并且所有触屏处理必须在onTouchEvent()中像正常情况一样发生。

3、  只要从onInterceptTouchEvent()返回false,接下来的每一个事件(截止到up并包括最后一个up)将会首先被传递到这里,然后到目标viewonTouchEvent()

4、  如果从onInterceptTouchEvent()返回true,你将不会接收到任何以下事件:目标view将会接收到相同的事件但是带着ACTION_CANCEL的动作,所有以后的事件将会被传递到你的onTouchEvent()方法中并且不再在这里出现。

返回值:返回truechildernview那里偷取动作事件并通过onTouchEvent()把它们分发到这个ViewGroup。当前的目标view将会接收到一个ACTION_CANCEL事件,并且将来也不会再有消息被传递到这里。

ViewGroup类的onTouchEvent(MotionEvent event)分析

实现这个方法去处理触屏事件

如果事件被处理则返回true,没有被处理则返回false


基本的规则是:

1.       down事件首先会传递到onInterceptTouchEvent()方法

2.       如果该ViewGrouponInterceptTouchEvent()在接收到down事件处理完成之后return false,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标viewonTouchEvent()处理。

3.       如果该ViewGrouponInterceptTouchEvent()在接收到down事件处理完成之后return true,那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGrouponTouchEvent()处理,注意,目标view将接收不到任何事件。

4.       如果最终需要处理事件的viewonTouchEvent()返回了false,那么该事件将被传递至其上一层次的viewonTouchEvent()处理。

5.       如果最终需要处理事件的view onTouchEvent()返回了true,那么后续事件将可以继续传递给该viewonTouchEvent()处理。

阅读(1045) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~