对ViewGroup touch事件响应的理解

本文详细解析了Android中ViewGroup如何处理触摸事件,包括ACTION_DOWN时如何调用onInterceptTouchEvent方法决定是否拦截事件,以及ACTION_MOVE时如何处理mMotionTarget变量来决定事件的流向。

   ViewGroup在接收到touch事件时,通过dispatchTouchEvent(MotionEvent event)把事件分发到子view里. touch事件的起始动作是ACTION_DOWN, viewgroup会调用onInterceptTouchEvent(MotionEvent ev)方法,若返回false才会正式分发事件到子view中,子view也调用dispatchTouchEvent方法,若返回true证明它消费了这个事件, viewgroup会把mMotionTarget设为该子view。

   在后续事件分发中(通常为ACTION_MOVE), 若mMotionTarget为null, 则viewgroup会消费这个事件, 否则viewgroup会调用onInterceptTouchEvent方法,若返回true时表示viewgroup要消费这个事件, 它会把mMotionTarget设为null然后返回true. 若返回false表示继续由子view来消费该事件。

    总的来说,就是若 onInterceptTouchEvent方法返回true或者 ACTION_DOWN时没有子view消费该事件,则由viewgroup来消费该事件,否则将事件分发到子view中处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值