ViewGroup类的onInterceptTouchEvent()方法及所有View类的onTouchEvent()方法的使用及联系...

onInterceptTouchEvent()方法是只有ViewGroup的子类才有的方法:

  1.  功能理解上来说是父视图类拦截了TouchEvent后来由该父视图来判断此Event要由谁来处理——自己或者下传给子视图逐级判断。因此只能是ViewGroup这种可以有子视图的容器类才有该方法。

而onTouchEvent()方法是所有View的子类都有的,当然也包括ViewGroup。因此ViewGroup也有该方法,而且肯定先是ViewGroup的onInterceptTouchEvent()传递给它本身的onTouchEvent()后若需要才向上传递给子视图。

下面介绍之间的传递判断:

1.  注:判断绝对是先从ACTION_DOWN事件开始!!!Down事件先传递给最底层的ViewGroup对象即最大的容器。传递给它的onInterceptTouchEvent(),然后根据它的返回值判断:

  (1).  若返回false,则ViewGroup对象表示不阻止该Down事件及后续的Move和Up事件的传递,会继续接收后续事件但同时不会再传递给ViewGroup的onTouchEvent()方法。而是会逐级往下传直到传递给确定接收该事件的子视图。

  (2).  若返回true,则表示该ViewGroup要拦截该Down、Move及Up事件,同时Move、Up事件也不会再传递给onInterceptTouchEvent()而是都只会直接传递给自己的onTouchEvent()方法且不再往下传。

2. 向下传递给子视图View子类的判断 

  (1).  若View子类的onTouchEvent()方法返回true,则后续事件仍会继续传递到该View子类的onTouchEvent()方法。

  (2).  若View子类的onTouchEvent()方法返回false,则那么该事件将会被继续传递给其上一级父View类的onTouchEvent()方法中,及(1)与(2)之间循环判断。

 

Note:  ViewGroup类也是View的子类,因此上述2(2)中的父View类判断后若返回true,则跳到2(1)中,后续所有事件都将直接传递给该父View,而不会再通过其下一级的子View。当然若返回false,则会继续往上传递。

  

  这是我自己参照 http://www.blogjava.net/TiGERTiAN/archive/2011/02/22/344869.html 此文后的理解。

  或许描述方法对别人来说有点乱,抱歉。可参照原作中的运行结果解释再深入理解。

转载于:https://www.cnblogs.com/DonkeyTomy/articles/2981222.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值