自定义View之Draw过程

一、单一View

自定义View之Draw过程

二、ViewGroup

自定义View之Draw过程

三、优化细节

1、源码

/**
  *   a. 该标记位的作用是:当一个View不需要绘制内容时,系统进行相应优化
  *   b. 默认情况下:View 不启用该标记位(设置为false);ViewGroup 默认启用(设置为true)
  */ 
public void setWillNotDraw(boolean willNotDraw) {

    setFlags(willNotDraw ? WILL_NOT_DRAW : 0, DRAW_MASK);

}

2、应用场景

  1. setWillNotDraw参数设置为true:当自定义View继承自 ViewGroup 、且本身并不具备任何绘制时,设置为 true 后,系统会进行相应的优化。
  2. setWillNotDraw参数设置为false:当自定义View继承自 ViewGroup 、且需要绘制内容时,那么设置为 false,来关闭 WILL_NOT_DRAW 这个标记位。