美文网首页
onInterceptTouchEvent方法是否累赘?

onInterceptTouchEvent方法是否累赘?

作者: 2f479b1467f1 | 来源:发表于2016-07-14 10:36 被阅读968次

    熟悉事件分发体系的同学应该知道,viewgroup相比较view多出来一个方法-onInterceptTouchEvent()。

    查阅了很多资料,发现大部分对于onInterceptTouchEvent的解释是拦截事件,可是对于一个viewgroup,dispathch应该足够了,为什么要再去写一个onInterceptTouchEvent呢?

    不然,其实真像如下:
    onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截.

    down事件首先会传递到onInterceptTouchEvent()方法

    如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return false,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标view的onTouchEvent()处理。

    如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return true,那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGroup的onTouchEvent()处理,注意,目标view将接收不到任何事件。

    如果最终需要处理事件的view的onTouchEvent()返回了false,那么该事件将被传递至其上一层次的view的onTouchEvent()处理。

    如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理。

    总结下来就是,onInterceptTouchEvent方法有一个功能,如果把事件分发比作水管,那onInterceptTouchEvent类似于堵住水管,只要他返回ture,那么该次操作的后续事件将不会传递给onInterceptTouchEvent,而是直接传递给onTouchEvent。

    相关文章

      网友评论

          本文标题:onInterceptTouchEvent方法是否累赘?

          本文链接:https://www.haomeiwen.com/subject/tdyejttx.html