您的位置:首页 > 移动开发 > Android开发

Android View事件传递机制(一)

2016-08-28 15:46 411 查看

Android View事件传递机制(一)

需要明确的事情

用户的一次点击,会产生一个事件序列,也就是多次调用事件方法的函数。具体的说就是:一次
ACTION_DOWN
的事件、多个
ACTION_MOVE
的事件、 一个
ACTION_UP
的事件。

我们可以将传递过程分为两个部分,第一部分为 是否往分发事件的传递,其过程为:由父
view
向子
view
传递(也就是
dispatchTouchEvent
方法); 第二部分为 是否处理事件的传递,其过程为:由子
view
向父
view
传递(也就是
onTouchEvent
)。
onInterceptTouchEvent
方法决定了第一个传递过程到哪一层结束,同时,第二个传递也就相应从这一场开始。

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

具体的情形

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

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

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

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

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

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

以上是自己简单总结,之后会结合源码在进一步分析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息