文档详情

Android源码分析-点击事件派发机制.pdf

发布:2017-09-13约2.32万字共10页下载文档
文本预览下载声明
ssiinnggwwhhaattiiwwaannnnaa的的专专栏栏 关关注注aannddrrooiidd、、hhttmmll55等等移移动动互互联联网网技技术术 [[置置 ]] AAnnddrrooiidd源源码码分分析析--点点击击事事件件派派发发机机制制 分类: android开发 2013-12-16 01:35 1637人阅读 评论 (19) 收藏 举报 源码androidframeworkonTouchEvent 转载请注明出处:/singwhatiwanna/article/details 概概述述 一直想写篇关于Android事件派发机制的文章,却一直没写,这两天刚好是周末,有时间了,想想写一篇吧,不然总 是只停留在会用的层次上但是无法了解其内部机制。我用的是4.4源码,打开看看,挺复杂的,尤其是事件是怎么从 Activity派发出来的,太费解了。了解Windows消息机制的人会发现,觉得Android的事件派发机制和Windows的消息 派发机制挺像的,其实这是一种典型的消息 “冒泡”机制,很多平台采用这个机制,消息最先到达最底层View,然 后它先进行判断是不是它所需要的,否则就将消息传递给它的子View,这样一来,消息就从水底的气泡一样向上浮 了一点距离,以此类推,气泡达到 部和空气接触,破了 (消息被处理了),当然也有气泡浮出到 层了,还没破 (消息无人处理),这个消息将由系统来处理,对于Android来说,会由Activity来处理。 AAnnddrrooiidd点点击击事事件件的的派派发发机机制制 11.. 从从AAccttiivviittyy传传递递到到底底层层VViieeww 点击事件用MotionEvent来表示,当一个点击操作发生时,事件最先传递给当前Activity,由Activity的 dispatchTouchEvent来进行事件派发,具体的工作是由Activity内部的Window来完成的,Window会将事件传递给 decor view,decor view一般就是当前界面的底层容器 (即setContentView所设置的View),通过 Activity.getWindow.getDecorView ()可以获得。另外,看下面代码的的时候,主要看我注释的地方,代码很多很 复杂,我无法一一说明,但是我注释的地方都是关键点,是博主仔细读代码总结出来的。 源码解读: 事件是由哪里传递给Activity的,这个我还不清楚,但是不要紧,我们从activity开始分析,已经足够我们了解它 的内部实现了。 Code:Activity#dispatchTouchEvent /** * Called to process touch screen events. You can override this to * intercept all touch screen events before they are dispatched to the * window. Be sure to call this implementation for touch screen events * that should be handled normally. * * @param ev The touch screen event. * * @return boolean Return true if this event was consumed. */ public boolean dispatchTouchEvent MotionEvent ev) { if ev.getAction ) == MotionEvent.ACTION_DOWN) { //这个函数其实是个空函数,啥也没干,如果你没重写的话,不用关心 onUserInteraction ); } //这里事件开始交给Activity所附属的Window进行派发,如果返回true,整个事件循环就结束了 //返回false意味着事件没人处理,所有人的onTouchEvent都返回了false,那么Activity就要来做最后的收场。 if getWindow ).superDispatchTouchEvent ev)) { r
显示全部
相似文档