如果我们想自定义图形的话,就要使用Canvas,因为Canvas是自定义图形的核心可组合项。在Canvas中,可用空间大小可用通过modifier来设置,例如设置Canvas的可用空间大小为填充其父元素:
Canvas(modifier = Modifier.fillMaxSize()) {
}
Canvas自动提供了一个维护自身状态且限定了作用域的绘图环境--DrawScope,其提供了一些有用的字段:
- drawContext:包含创建图形环境所需依赖项的当前DrawContext;
- center:图形环境当前边界的中心;
- size:当前维度和最大维度的Size对象;
- layoutDirection:绘制的布局的方向
这方便了我们为一组图形元素设置参数,我们用得到最多的可能就是size,因为其它对象基本都在内部引用比较多。
下面画一些基本的图形:
1.画一条线:
/**
* 画线
*/
@Composable
fun compose_drawLine() {
Canvas(modifier = Modifier.fillMaxSize()) {
val canvasWidth = size.width // 画布的宽
val canvasHeight = size.height // 画布的高
drawLine(
start = Offset(x = canvasWidth, y = 0f), // 起点
end = Offset(x = 0f, y = canvasHeight), // 终点
color = Color.Red // 颜色
)