关闭

Android View事件传递机制(一)

标签: androidview-事件传递
118人阅读 评论(0) 收藏 举报
分类:

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开发艺术探索》。


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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3620次
    • 积分:176
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档