Android View事件传递机制(一)

Android View事件传递机制(一)


需要明确的事情

  1. 用户的一次点击,会产生一个事件序列,也就是多次调用事件方法的函数。具体的说就是:一次ACTION_DOWN的事件、多个ACTION_MOVE的事件、 一个ACTION_UP的事件。
  2. 我们可以将传递过程分为两个部分,第一部分为 是否往分发事件的传递,其过程为:由父view向子view传递(也就是dispatchTouchEvent方法); 第二部分为 是否处理事件的传递,其过程为:由子view向父view传递(也就是onTouchEvent)。 onInterceptTouchEvent方法决定了第一个传递过程到哪一层结束,同时,第二个传递也就相应从这一场开始。

  3. ACTION_DOWN的事件相当于首先去寻找处理该事件的view,如果找到了,之后的事件会直接传递给该view,否则,之后的事件直接由最外层的Activity处理了。

具体的情形

注意,这里说的是down的事件。

  1. 如果 ViewViewGroupdispatchTouchEvent 返回 true ,那么该事件的传递结束,并且之后的事件序列都会只调用到该dispatchTouchEvent方法,然后结束。(不会再调用自己的onInterceptTouchEventonTouchEvent方法了。)

  2. 如果 ViewViewGrouponInterceptTouchEvent 返回 true ,那么会调用自己的onTouchEvent方法,并且继续向上传递,调用父viewonTouchEvent,直到找到一个 onTouchEvent 返回为true时停止。之后的事件就会直接传到这个onTouchEvent方法中。(之注意,之后的事件不会再调用到onInterceptTouchEvent方法)。

  3. 如果 ViewViewGrouponTouchEvent 返回 true ,是否处理事件的传递就会到此结束,不会再想起父view传递,而且之后的事件序列也就直接传到该view的onTouchEvent方法。

以上,就是view 的事件传递的宏观上的描述。可能描述的不够清楚,如果有兴趣的话,最好自己写个demo,简单的修改返回值,来进行相应的测试。只有知道了其宏观表现,对于继续深入研究时,才不会盲目不知所措。

在这一部分,主要是参考了《Android 群英会》和《Android开发艺术探索》。


以上是自己简单总结,之后会结合源码在进一步分析。

阅读更多
个人分类: android-技术
上一篇View 滑动的实现
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭