onInterceptTouchEvent和onTouchEvent拦截与消费事件

布局控件ViewGroup中包含子View,而子View就是最终展示给用户并与用户交互的控件如输入框EditView及文字展示TextView,这篇文章暂且称该类控件为“最终控件”。

消费事件函数onTouchEvent()

拦截事件函数onInterceptTouchEvent()

最终控件中只存在消费事件函数onTouchEvent(),不存在拦截事件onInterceptTouchEvent()函数,在onTouchEvent()函数中消费底层View传来的Down事件,处理完后

return false,意思就是告诉系统,我只需要Down事件就ok了Move及Up不再需要了,也就终止了本身的Touch事件,但是这些事件需要善始善终啊,怎么办,就返回到上一级布局控件ViewGroup中消费掉,以此类推直到布局控件onTouchEvent()函数中Down返回true为止,后续的Move及Up事件也会在该布局控件中消费掉。

return true,意思就是继续消费后续的Move及Up事件。


布局控件ViewGroup中存在onInterceptTouchEvent(),目的是拦截事件自己处理

在onInterceptTouchEvent()函数中接收到Down事件处理完

A情况:return true,拦截Touch事件不再传递直接回调该布局控件的onTouchEvent(),后续的Move及Up事件传递不再经过该布局控件的onInterceptTouchEvent()函数,直接回调该布局控件的onTouchEvent()。

B情况:return false,不拦截Down事件,继续向子View传递,直到最终控件并调用最终控件的onTouchEvent()


在onInterceptTouchEvent()函数中接收到Move事件(前提是B情况)处理完

AM情况:return true,取消Move事件,如果子View不是最终控件则调用onInterceptTouchEvent()函数传入的Action为ACTION_CANCEL,依次类推直到最终控件时调用最终控件的onTouchEvent()传入的Action为ACTION_CANCEL,再回到该布局控件中,此时不会再回调onInterceptTouchEvent()函数,直接回调该布局控件的onTouchEvent()此时传入Action为ACTION_UP,Move事件传递结束

BM情况:return false,不拦截Down事件,继续向子View传递,直到最终控件并调用最终控件的onTouchEvent()函数



在onInterceptTouchEvent()函数中接收到Up事件(前提是BM情况)处理完

AU情况:return true,取消Up事件,如果子View不是最终控件则调用onInterceptTouchEvent()函数传入的Action为ACTION_CANCEL,依次类推直到最终控件时调用最终控件的onTouchEvent()传入的Action为ACTION_CANCEL,UP事件传递结束

BU情况:return false,不拦截Up事件,继续向子View传递,直到最终控件并调用最终控件的onTouchEvent()函数



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值