《Android实战基础教程》课件第九章.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

目录9.1ViewRoot和DecorView9.2理解MeasureSpec9.3View的工作流程9.4自定义View 九、View的工作原理

九、View的工作原理ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewGroup对象,并将ViewRootImpl对象和DecorView建立关系。View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout和draw三个过程才能最终将一个View绘制出来,其中measure用来测量View的宽高,layout用来确定View在父容器中的放置位置,而draw则负责将View绘制在屏幕上。针对performTraversals的大致流程,如图9.1所示。9.1ViewRoot和DecorView

九、View的工作原理图9.1

九、View的工作原理performTraversals会移除调用performMeasure、performLayout和performDraw,这三个方法分别完成顶级View的measure、layout和draw这三大流程,其中在performMeasure中会调用measure方法,在measure方法中又会调用onMeasure方法,在onMeasure方法中则会对所有的子元素进行measure过程,这个时候measure流程就从父容器传递到子元素了,这样就完成了一次measure过程。接着子元素会重复父容器的measure过程,如此反复就完成了整个View树的遍历。同理,performLayout和perform的传递流程和performMeasure是类似的,唯一不同的是,performDraw的传递过程是在draw方法中通过dispatchDraw来实现的。

九、View的工作原理Measure过程中决定了View的宽高,Measure完成之后,可以通过getMeasureWidth和getMeasureHeight方法来获得View的测量宽高,在几乎所有的情况下它都等同于View的最终宽高,特殊情况除外。Layout过程决定了View的四个顶点的坐标和实际的View的宽高,完成以后,可以通过getTop、getBottom、getLLeft、getRight来得到View的四个顶点的位置,并可以通过getWidth和getHeight来得到View的最终宽高。Draw过程则决定了View的显示,只有Draw方法完成以后View的内容才能呈现在屏幕上。

九、View的工作原理如图9.2所示,DecorView作为View,一般情况下它内部包含了一个竖直方向的LineraLayout,在这个LinearLayout里面有上下两个部分,上面为标题栏,下面为内容栏。在Activity中我们通过setContentView所设置的布局文件其实就是被加到内容栏中去了。图9.2

九、View的工作原理MeasureSpec代表一个32位int值。高2位代表SpecMode,低30位代表SpecSize。SpecMode是指测量模式,而SpecSize指在某种测量模式下的规格大小。9.2理解MeasureSpec9.2.1MeasureSpec

九、View的工作原理

九、View的工作原理MeasureSpec通过将SpecMode和SpecSize打包成一个int值来避免过多的对象内存分配。为了方便操作,其提供了打包和解包操作,SpecMode和SpecSize也是一个int值。SpecMode有三类:。UNSPECIFIED:父容器不对View有任何限制,要多大给多大,这种情况一般用于系统内部,表示一种测量的状态。EXACTLY:父容器已经检测出View所需要的精确大小,这个时候最终大小就是SpecSize所指定的值,它对应于LayoutParams中的matchparent和具体的数值两种模式。AT_MOST:父容器指定了一个可用的大小即SpecSize,View的大小不能大于这个值,具体是多大看不同的View的具体实现。它对应于LayoutParams中的wrap_content。

九、View的工作原理

文档评论(0)

酱酱 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档