4.关于View的绘制 (下):draw

1.draw过程

就是将view绘制到屏幕上

  1. view的draw
public void draw(Canvas canvas) {
    final int privateFlags = mPrivateFlags;
        mPrivateFlags = (privateFlags & ~PFLAG_DIRTY_MASK) | PFLAG_DRAWN;

        /*
         * Draw traversal performs several drawing steps which must be executed
         * in the appropriate order:
         *
         *      1. Draw the background
         *      2. If necessary, save the canvas' layers to prepare for fading
         *      3. Draw view's content
         *      4. Draw children
         *      5. If necessary, draw the fading edges and restore layers
         *      6. Draw decorations (scrollbars for instance)
         */

	....
}
  • 1绘制背景drawBackground(canvas);
  • 3绘制自己onDraw(canvas);
  • 4绘制子元素dispatchDraw(canvas);
  • 6绘制前景装饰onDrawForeground(canvas);
  • 7绘制焦点高亮drawDefaultFocusHighlight(canvas);

2.ViewGroup的draw

  • viewGroup有drawChild方法,内部调用draw
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
        return child.draw(canvas, this, drawingTime);
 }
  • child.draw(3个参数)会调用view.draw(Canvas), 流程回到了view的draw
发布了37 篇原创文章 · 获赞 0 · 访问量 554

猜你喜欢

转载自blog.csdn.net/qq_37514242/article/details/104446108