对手势分发机制的一些理解

参考资料:

1、 http://www.cnblogs.com/linjzong/p/4191891.html

2、 http://www.cnblogs.com/mengdd/p/3394345.html

 

ViewGroup 的 onDispatchTouchEvent() 负责对手势的分发,当 onDispatchTouchEvent 方法返回false的时候,事件分发被拦截,从该ViewGroup开始在这之后的子View将不会接收到对事件处理的通知,onTouchEvent将会由上层ViewGroup或者Activity执行。(但是子View的ACTION_DOWN事件还是会执行)返回true的意思即分发事件被消费,那么viewGroup的onTouchevent方法将不会被调用。将会调用子View的onTouchEvent。

 

而子view的ondispatchTouchEvent方法并不执行分发对象,其执行的对象就是他自己,它的返回值是return onTouchEvent()。如果return true则表示改TouchEvent会被消费,即会执行ACTION_MOVE/UP事件。


 

当所有的子view都返回false时,viewgroup就会执行其自身的onTouchEvent 方法。(因为当子view返回false的时候,将会上传给parent的viewgroup的onTouchEvent方法,如果ViewGroup不处理,将会一直上传到Activity。)隧道式下发,冒泡式上传。

 

onInterceptTouchEVent返回true 时 ,拦截正在执行的手势,将由执行该方法的viewgroup的onTouchEvent方法执行Action一系列动作。此时子view将会收到一个Action_Cancel的状态,并在状态中处理(其ACTION_DOWN/MOVE/UP方法将不会被执行)。如果onInterceptTouchEvent返回true,则子view的ACTION_DOWN方法也不会执行,即手势被拦截,只会执行viewgroup的onTouchEvent。

 

如有错误欢迎指正,本文也是对应文章开头参考代码测试得出的个人见解。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值