ViewGroup.onInterceptTouchEvent() onTouchEvent()

实现这个方法去拦截所有的屏幕手势动作事件。这允许你去查看这些事件当它们被分发到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)将会首先被传递到这里,然后到目标view的onTouchEvent()。

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

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

ViewGroup类的onTouchEvent(MotionEvent event)分析

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

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

基本的规则是:

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

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

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

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

5. 如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值