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

1.draw过程

就是将view绘制到屏幕上

1.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);
  2. 绘制自己onDraw(canvas);
  3. 绘制子元素dispatchDraw(canvas);
  4. 绘制前景装饰onDrawForeground(canvas);
  5. 绘制焦点高亮drawDefaultFocusHighlight(canvas);

自定义view继承自View,onDraw(canvas)方法中,canvas提供来丰富的API,可以绘制直线、巨型、圆、弧度…

1.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
ViewGroup没有覆写onDraw()方法,使用的是View的onDraw()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值