在Android中,View扮演着很重要的角色,简单说,View是Android在视觉上的呈现。在开发中,每时每刻都在和View打交道,常见的由Android提供使用的有:TextView,ImageView,ListView..等等。如果使用一些酷的效果,当然要我们自定义View了,在自定义View之前,先来简单记录下View的工作原理,帮助以后更好的理解自定义View的使用。
说道View原理,肯定要说道顶层的 ViewRoot 和 DecorView。
一、ViewRoot
ViewRoot 对应于 ViewRootImpl 类,是连接WindowManager 和 DecorView 的纽带,View 的三大流程是通过 ViewRoot 来完成的。在 ActivityThread 中,当 Activity 对象被创建完毕后,会将 DecorView 添加到 Window 中,同时会创建 ViewRootImpl 对象,并将 ViewRootImpl 对象和 DecorView 建立关联。借图说明:
这里写图片描述View 的绘制流程是从 ViewRoot 的 performTraversals 方法开始的,经过 Measure、layout 和 draw 三个过程才能将一个View绘制出来,performTraversals 的大致流程:
这里写图片描述图所示,performTraversals 会依次调用 ViewGroup 的 三个方法,这个三个方法分别完成 View 的三个方法,反复完成整个View树的遍历。
二、DecorView
DecorView 作为 顶级 View,它本质上是一个FrameLayout,DecorView有唯一一个子View,它是一个垂直LinearLayout,包含两个子元素,一个是TitleView(ActionBar的容器),另一个是ContentView(窗口内容的容器)。关于ContentView,它是一个FrameLayout(android.R.id.content),我们平常用的setContentView就是设置它的子View。上图还表达了每个Activity都与一个Window(具体来说是PhoneWindow)相关联,用户界面则由Window所承载。
网友评论