Android 自定义View(一)原理

来源:互联网 发布:mac rar解压软件下载 编辑:程序博客网 时间:2024/06/08 00:08

在Android中,View扮演着很重要的角色,简单说,View是Android在视觉上的呈现。在开发中,每时每刻都在和View打交道,常见的由Android提供使用的有:TextView,ImageView,ListView..等等。如果使用一些酷的效果,当然要我们自定义View了,在自定义View之前,先来简单记录下View的工作原理,帮助以后更好的理解自定义View的使用。
说道View原理,肯定要说道顶层的 ViewRootDecorView

一、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所承载。

总结

主要说了View的工作绘制原理,有图和些简单描述。
Android 自定义View篇:

  • Android 自定义View(一)原理
  • Android 自定义View(二)方法分析