android-----事件分发机制测试系列(五)

        这篇是对事件分发机制的终极总结,包括前面测试中所用到的一些知识点,有什么不对的地方希望大家能够批评指正;

        结论:

        (1):事件的传递方向是:Activity----->ViewGroup----->View,即隧道式分发;

        (2):ViewGroup的事件处理方法调用顺序是:dispatchTouchEvent----->onInterceptTouchEvent----->onTouchEvent;

        (3):Activity以及View的事件处理方法调用顺序是:dispatchTouchEvent----->onTouchEvent;

        (4):Activity和View只有dispatchTouchEvent和onTouchEvent方法,ViewGroup继承自View,并且添加了onInterceptTouchEvent方法

        (5):事件的消费回传顺序是View----->ViewGroup----->Activity,即冒泡式回传;

        (6):ViewGroup的onInterceptTouchEvent返回true表示我们拦截了事件,我们在子View中可以通过ViewGroup的requestDisallowInterceptTouchEvent方法来设置ViewGroup不拦截除DOWN事件以外的事件,因为对于DOWN事件,在ViewGroup的dispatchTouchEvent方法中会让requestDisallowInterceptTouchEvent设置的拦截标志位失效;

        (7):如果除Activiyt之外的View都没有消费掉DOWN事件的话,随后的MOVE以及UP事件将不再会从Activity分发出去了,直接将由Activity的onTouchEvent来执行;

        (8):在ViewGroup中,一旦一个ViewGroup决定拦截某一个事件,那么这个事件序列中剩余的事件将不再会由该ViewGroup的子View去处理,即事件将在该ViewGroup层停止分发,同时随后的事件将不再会调用该ViewGroup的onInterceptTouchEvent方法;

        (9):如果某个View开始处理事件,但是没有消费掉DOWN事件,那么随后的MOVE以及UP事件将不再会交给该View来处理了,而是交给他的父View来处理;

        (10):ViewGroup默认是不拦截事件的,也就是ViewGroup源码中的onInterceptTouchEvent默认情况下是返回false的;

        (11):如果View的clickable与longclickable有一个是true的话,View的onTouchEvent方法一定是返回true的,也就是说大多数View默认情况下是直接消费事件的;

        (12):View的enable属性并不会影响View的onTouchEvent方法的返回值,真正影响onTouchEvent返回值的是是否为View设置clickable以及longclickable,这两个属性的设置可以通过setOnClickListener以及setOnLongClickListener来实现;

        (13):在View的事件分发过程中,如果我们为View设置了Touch事件监听器,并且它的onTouch方法返回true的话,那么View的onTouchEvent将不会执行,而因为click以及longclick是在调用onTouchEvent方法的时候才会去监听,因而也就不会执行了;

        (14):在View的事件分发中,在DOWN事件的情况下会触发对click以及longclick的监听,但是在UP事件结束之前onClick方法是不会执行的,而onLongClick方法是在DOWN事件之后就可以了,但是onLongClick方法与MOVE以及UP之间的执行顺序是不确定的,但是他一定会在onClick方法之前执行;

        (15):View的事件分发中在onTouchEvent中的MOVE事件主要用于检测我们当前的移动是否超出了View的控制范围,如果超出的话,即使View设置了Click监听器,但他的onClick方法是不会执行的;但是onLongClick方法的执行是依赖于你滑动的速度的,如果你很快的滑出View的范围,那onLongClick方法是不会执行的,但是如果你缓慢的滑出View的范围,onLongClick方法还是会执行的;

        以后还有的话会继续添加进来的,未完,待续!!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值