Canvas 与自定义绘制

大约 2 分钟约 517 字

Canvas 与自定义绘制

Kuikly Compose 支持通过 Canvas 组件与绘制类 Modifier 进行自定义绘制,绘制逻辑运行在 DrawScope 作用域内。

Canvas 组件

在指定区域内执行画布绘制。

参数描述类型
modifier 必需尺寸策略,必须指定尺寸Modifier
contentDescription 非必需无障碍服务使用的描述文本(仅在带该参数的重载中提供,且为必填)String
onDraw 必需绘制逻辑DrawScope.() -> Unit

使用限制

  • modifier 必须指定尺寸(Modifier.size()、Modifier.fillMaxSize()、ColumnScope.weight() 等);父容器为包裹内容时只能使用精确尺寸。
  • onDraw 在绘制阶段执行,其中不能调用 @Composable 函数,否则会在运行时抛异常。

示例

Canvas(modifier = Modifier.size(200.dp)) {
    drawRect(color = Color.Red)
    drawLine(
        color = Color.Blue,
        start = Offset(0f, 0f),
        end = Offset(size.width, size.height),
        strokeWidth = 4f
    )
}

绘制 Modifier

生效范围

Modifier.drawBehind 仅在 Canvas 组件上生效。

Modifier.drawBehind

在组件内容背后绘制。

参数描述类型
onDraw绘制逻辑DrawScope.() -> Unit

DrawScope

绘制作用域,提供当前绘制环境信息与绘制方法。

环境信息

属性描述类型
size当前绘制区域尺寸Size
center当前绘制区域中心点Offset
layoutDirection布局方向LayoutDirection
drawContext绘制上下文DrawContext

变换与裁剪

方法说明
inset收缩绘制区域
translate平移
rotate / rotateRad旋转(角度 / 弧度)
scale缩放
clipRect / clipPath按矩形 / 路径裁剪
withTransform组合多个变换
drawIntoCanvas直接操作底层 Canvas

绘制方法

方法说明
drawLine绘制线段(支持 Color 与 Brush 两个重载)
drawRect绘制矩形(支持 Color 与 Brush 两个重载)
drawRoundRect绘制圆角矩形
drawCircle绘制圆
drawOval绘制椭圆
drawArc绘制圆弧
drawPath按 Path 绘制
drawPoints绘制点集
drawOutline按 Outline 绘制

当前支持范围

Kuikly 的 DrawScope 绘制方法当前未开放 pathEffect、colorFilter、blendMode 参数(源码中对应参数处于注释状态)。依赖描边特效、颜色滤镜或混合模式的绘制逻辑需要改用其他方式实现。