2011年9月20日星期二

ViewGroup.onInterceptTouchEvent() 分析

  • Touch事件分发 (reference 里面的解释(ViewGroup? ::onInterceptTouchEvent())相当的晕,所以写下来)
    • Touch事件是以一次 down, move, ..., up 为一个单位,叫gesture; 各gesture是相互独立的
    • Touch事件默认直接发给target
    • 当然, 刚开始的时候target == null, target是在down的时候确定
    • 子View::onTouchEvent()的返回值,决定了要不要放弃后面的move,up。 如果放弃,则把机会留给同一区域的兄弟view。 这个策略,跟我们之前做的父子处理是不一样的。
    • 在down的时候, 如果ViewGroup::onInterceptTouchEvent()返回true, 那么可以在自己的onTouchEvent()中处理整个gesture。ViewGroup::onInterceptTouchEvent()不会再被调用。
    • 如果在中途返回true (即down的时候返回false, 后面某个move返回true), 那么剩下的gesture交给自己的onTouchEvent()。但是这个event本身不会发到ViewGroup::onTouchEvent()
    • 如果返回false,那么自己的onTouchEvent()不会给调用,直接调用target.onTouchEvent()。当然,ViewGroup::onInterceptTouchEvent()每次都会被调
    • ...
    • 这个策略太严密了

没有评论: