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 参数(源码中对应参数处于注释状态)。依赖描边特效、颜色滤镜或混合模式的绘制逻辑需要改用其他方式实现。