通俗易懂系列之Android中的事件分发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ever69/article/details/81137062

谈起Android中的事件分发,相信这是每个Android开发都要经历的一道坎,最早做开发的时候看这片内容也是看的云里雾里的,随着自己知识和经验的不断积累,回头再理解这块内容也就"洒洒水"了。今天抽空出来整理一下这方面的知识,也算是对个人以往的理解做一个总结吧。

一、关于事件分发的三个方法

有关事件分发的三个方法分别是:dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent()。这三个方法存在有关事件分发的Activity、ViewGroup和View中,需要注意一下只有ViewGroup才有onInterceptTouchEvent()这个方法,Activity和View是没有这个方法的。对于这三个方法具体是干什么的,可以这样理解:

dispatchTouchEvent():对事件的反应
onInterceptTouchEvent():对事件的过滤
onTouchEvent():对事件的处理

通俗一点来讲:
dispatchTouchEvent()对事件的反应:就是对于某个事件,是选择已处理/不处理、处理不了还是交由下面去处理,当然对于View,交由下面处理就是交由自己处理。
onInterceptTouchEvent对事件的过滤:这个方法只存在于ViewGroup中,决定了事件是否交由自己处理或者交由下面处理。像一个漏勺一样,漏过去的就交给下面处理,没有漏过去的就交由自己处理,可以理解为事件过滤。
onTouchEvent对事件的处理:这个方法在三个方法中处在最低的位置,事件通过层层传递最终到达的就是这里,这里一般会对事件作出具体的处理。

二、事件分发中的三个层级

看到这里,可能对事件分发的理解还是云里雾里,那么再通俗一点,结合生活中的实例对事件分发在做一次理解,由于这个实例很贴近生活,甚至在深刻的影响着你的生活,所以这次你一定会懂的

如果你是在公司上班的员工,那你肯定有上司和Boss。那么公司里的层级和事件分发里的层级就是一样的,可以这样设定,View就是你,处在公司的底层,任劳任怨;ViewGroup是你的上司,对你批评严厉,对上司马首是瞻;Activity则是大Boss,决定了你和上司未来工作的发展。

1、Activity

Boss嘛,公司里最大的人,公司有什么事情Boss肯定是第一个知道的,那么当事情来了的时候,他就可以选择对事情的反应(dispatchTouchEvent),已处理/不处理对应着它dispatchTouchEvent的返回true或false,交由下面去处理对应它返回的super。

2、ViewGroup

上司嘛,公司里的中坚力量,Boss来了任务,自己当然也要做出反应啦(dispatchTouchEvent),返回true,告诉老板这个事情已经处理了,返回false嘛,一会和View一起讲,而返回super嘛,这次就和Boss的返回super不一样了,它不会直接把事情丢给下面去处理,而是多了一个步骤(onInterceptTouchEvent),先自己考虑一下这个事情用不用自己亲自处理,所以对于onInterceptTouchEvent,返回super和false,“好像隔壁新来的小王可以处理一下”;返回true,“新来的这批没有一个能打的,还是得自己处理啊”

3、View

自己嘛,处在这个阶层的我们,大家结合自己应该都懂了吧,叫天天不应,叫地地不灵,整天被上级为所欲为,实在是苦。
哎,题外话题外话,擦干眼泪继续为大家讲解,View处在三个阶层中的最底层,虽然有着和大Boss一样方法,但是它和大Boss可是千差万别,对于上司派下来的任务,当然你也可以对它作出反应(dispatchTouchEvent),返回true表示这个任务已经完成啦,返回super呢,与Boss和上司的都不一样,直接走自己的onTouchEvent去做处理。现在只剩ViewGroup和View的dispatchTouchEvent返回false没有讲了,这点很重要,领悟了它可能会很大程度影响你在职场上的前程!当你和上司的dispatchTouchEvent返回false时,它不会向下属传递,也不会交由自己处理,它会直接告知上级,“这件事我解决不了!”,兄弟们,跟上级讲出这种话,你应该知道是什么后果吧!当你返回false告知自己不能解决时,你的领导会想“**,废物,这都解决不了,还要老子自己出马,以后升职加薪没你什么事了!”,那么如果当你上级也解决不了返回false会怎样呢?和你的上级一样,大Boss会想“**,一群废物,这都解决不了,养你们干什么吃的,今天都给我去财务报道!”,所以说,兄弟们,职场如战场啊,要想升职加薪不被炒,上头派下来的任务就算是**也要打碎牙齿往肚子里咽给领导说没问题!哎,一首凉凉送给自己。

三、事件分发流程整理图

相信看了上面的你一定对事件分发有了相当深刻的理解,再送你一张图系统的梳理一下,使它在脑中形成框架。事件分发的种种流程都可以从下图整理出来,通过这个图再结合自己写一个Demo,想不理解都难!

四、总结

啰嗦了这么多,总算是讲完了,每次写完一篇博客,都会对写的东西有更深刻的理解,其实很多知识就和我们身边的经历一样,多多结合生活中的实际,把知识带入生活,形成自己的理解,并不只是去理解别人的东西,学习没有捷径。就写到这里了,如果对我写的内容有不同的意见,欢迎大家积极评论~

猜你喜欢

转载自blog.csdn.net/Ever69/article/details/81137062