事件拦截机制简单分析

1 ViewGroup来说,有三个重要的事件拦截和处理的方法: dispatchTouchEvent (MotionEvent e) , onInterceptTouchEvent(MotionEvent e), onTouchEvent(MotionEvent e)
2 对于View来说,有两个重要的事件拦截和处理方法: dispatchTouchEvent(MotionEvent e), onTouchEvent(MotionEvent e)
注: 从上述方法可知,有分发事件,拦截事件,处理事件

举例1
嵌套结构是: 最外层是ViewGroupA,中间层是ViewGroupB,最底层是MyView, 并重写上述方法,不做任何处理时,执行过程如下,

这里写图片描述

分析: **事件的传递顺序是: ViewGroupA–>ViewGroupB–>MyView
事件的处理顺序是: MyView–>ViewGroupB–>ViewGroupA**
log输出的记录为: ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupB dispatchTouchEvent
ViewGroupB onInterceptTouchEvent
MyView dispatchTouchEvent
MyView onTouchEvent
ViewGroupB onTouchEvent
ViewGroupA onTouchEvent

举例2
嵌套结构是: 最外层是ViewGroupA,中间层是ViewGroupB,最底层是MyView, 并重写上述方法,其中ViewGroupA中的onInterceptTouchEvent 事件返回true 将事件拦截下来,执行过程如下,

这里写图片描述

log输出的记录为: ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupA onTouchEvent

举例3
嵌套结构是: 最外层是ViewGroupA,中间层是ViewGroupB,最底层是MyView, 并重写上述方法,其中ViewGroupB中的onInterceptTouchEvent 事件返回true 将事件拦截下来,执行过程如下,
这里写图片描述

log输出的记录为: ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupB dispatchTouchEvent
ViewGroupB onInterceptTouchEvent
ViewGroupB onTouchEvent
ViewGroupA onTouchEvent
举例4
嵌套结构是: 最外层是ViewGroupA,中间层是ViewGroupB,最底层是MyView, 并重写上述方法,其中MyView中的onTouchEvent 事件返回true 将事件拦截下来,执行过程如下,

这里写图片描述

log输出的记录为: ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupB dispatchTouchEvent
ViewGroupB onInterceptTouchEvent
MyView dispatchTouchEvent
MyView onTouchEvent
举例5
嵌套结构是: 最外层是ViewGroupA,中间层是ViewGroupB,最底层是MyView, 并重写上述方法,其中ViewGroupB中的dispatchTouchEvent 事件返回true 将事件拦截下来,执行过程如下,
这里写图片描述

log输出的记录为: ViewGroupA dispatchTouchEvent
ViewGroupA onInterceptTouchEvent
ViewGroupB dispatchTouchEvent
ViewGroupB onInterceptTouchEvent
MyView dispatchTouchEvent
MyView onTouchEvent
ViewGroupB onTouchEvent

另: MotionEvent 是android为触摸事件封装的一个类, 触摸事件就是一个动作的类型加坐标就可以完成,
其中可以通过MotionEvent 中的event.getX()与event.getRawX获取坐标点; 通过不同的ACTION(比如 MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE)来区分不用的动作类型.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值