view绘制流程

来源:互联网 发布:exo light软件 编辑:程序博客网 时间:2024/06/06 03:14
     view在Android是比较重要而且不容易理解的知识了,尤其是在自定义控件这一块本章就view的绘制流程
一些了解
   一、整体把控
    要想了解view的绘制流程,首先要知道Android中的view树结构,如下图
    当我们想要绘制view的时候,会遍历DecorView下的每一个view,对每个view的绘制会经过onMeasure,
  onLayout,onDraw三个过程,分别为测量、布局、绘制;在每个步骤之前都会先判断是否需要执行,流程
  如下
   二、步骤详解
      1.onMeasure测量
①如果对view对象本身进行测量只需要调用.measure即可,.measure在底层会自动调用onMeasure
②如果view对象类型为ViewGroup,那么要重写onMeasure方法,在onMeaure方法中使用
  .getMeasuredWidth()和.getMeasuredHeight()即可
③通过重写onSizeChange()方法获得宽高,onSizeChange()只会在控件大小发生变化时被调用
④通过getViewTreeObserver,view树观察者,当view树都加载完毕后触发观察者就可以测量出值
      2.onLayout布局
layout是相对于父布局的,父布局才会给子view定义其在布局中的位置
ViewGroup类重写onLayout方法,再通过子view的.layout布局view在父布局中的位置
.layout(boolean,left,top,right,bottom)
boolean来记录布局是否发生了变化,如果未发生变化那么就不再重新布局子view
      3.onDraw(canvas)绘制
本身重写onDraw方法,那么会重新绘制本身,要想绘制子view需要子view调用.draw方法绘制自身
canvas,绘制view的画布
绘制的过程大致如下
绘制自己的背景
绘制自己的内容
绘制子类(子类的draw方法)
      4.invalidate
主动调用invalidate会让view的视图失效,这时系统就会重新调用onDraw来完成新的绘制,这也是
Android中一部分动画实现的简单原理,通过改变view的位置,并且在不停的调用invalidate绘制新
位置的图形,在视觉上形成动画的感觉
   三、小结
      目前学习的知识经不起推敲,一推敲就会发现自己掌握的什么都不是,亚历山大啊,赶快学源码分析吧
   通过源码的分析会对知识的掌握更上一层楼
0 0