View体系(十一)View的draw流程

本文详细剖析了Android中View的draw流程,从绘制背景、保存canvas层到绘制内容、子View、阴影效果、装饰和焦点高亮,逐一解读每个步骤的关键代码和方法调用,帮助理解View的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前的文章《View体系(六)View工作流程入口》提到View的工作流程包括了measurelayoutdraw的过程,今天我们就来看一下Viewdraw流程是怎样的。

(注:文中源码基于 Android 12

Viewdraw流程很简单,源码里的注释官方也写的很清楚,我们看Viewdraw方法:

    public void draw(Canvas canvas) {
   
   
        ...
        // Step 1, draw the background, if needed
        drawBackground(canvas);
        ...
        // skip step 2 & 5 if possible (common case)
        ...
        // Step 2, save the canvas' layers
        ...
        // Step 3, draw the content
        onDraw(canvas);
        ...
        // Step 4, draw the children
        dispatchDraw(canvas);
        ...
        // Step 5, draw the fade effect and restore layers
        ...
        // Step 6, draw decorations (foreground, scrollbars)
        onDrawForeground(canvas);
        ...
        // Step 7, draw the default focus highlight
        drawDefaultFocusHighlight(canvas);

总览

官方注释已经清楚的写了每一步的工作:

  1. 如果需要,则绘制背景(drawBackground
  2. 保存当前canvas层
  3. 绘制View的内容(onDraw
  4. 绘制子View(dispatchDraw
  5. 如果需要,则绘制View的褪色边缘,类似于阴影效果
  6. 绘制装饰,比如滚动条(onDrawForeground
  7. 绘制默认焦点高亮效果(drawDefaultFocusHighlight

注释中说明了第2步和第5步可以跳过,这里就不展开讲解,在此重点分析其他步骤。

步骤1:绘制背景

进入ViewdrawBackground方法:

    private void drawBackground
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值