Compose中Canvas绘制

文章详细介绍了Canvas组件在AndroidJetpackCompose中如何绘制点、线、矩形、圆、椭圆、圆弧、图片以及路径,包括颜色、渐变、宽度、圆角等属性的使用。

Canvas绘制点

 

/**
 * Canvas绘制点
 */
@Composable
fun DrawPointsTest() {
    val points = arrayListOf(
        Offset(100f, 100f),
        Offset(300f, 300f),
        Offset(500f, 500f),
        Offset(700f, 700f),
        Offset(900f, 900f)
    )

    Canvas(modifier = Modifier.size(360.dp)) {
        drawPoints(
            points = points,
            //类型 PointMode.Points:点 PointMode.Lines:线 PointMode.Polygon:多边形
            pointMode = PointMode.Points,
            //颜色
            color = Color.Blue,
            //颜色渐变
//            brush = Brush.linearGradient(
//                0.0f to Color.Red,
//                0.5f to Color.Green,
//                1.0f to Color.Blue
//            ),
            //宽度
            strokeWidth = 30f,
            //Butt表示线段末端轮廓的起始点和结束点带有平缓的边缘,没有延伸;
            //Round表示线段末端以半圆开始和结束的轮廓;
            //Square表示线段末端将每个轮廓延伸笔触宽度的一半。
            cap = StrokeCap.Round
        )
    }
}

Canvas组件下用drawPoints绘制点;points属性添加点坐标;pointMode设置类型:PointMode.Points坐标为点。

PointMode.Lines两坐标点形成线段,不够两坐标最后一个坐标点自动省略不显示。

PointMode.Polygon多边形,多坐标点连线,和drawPath绘制路径类似。

 color属性设置坐标点的颜色。

brush属性设置坐标点或线的渐变。

strokeWidth属性设置坐标点或线的宽度。

cap设置坐标点或线末端是否为圆角。不设置默认为方形坐标点,设置后为圆形坐标点 。不设置实际是这样的点或线。

 

Canvas绘制线

 

/**
 * Canvas绘制线
 */
@Composable
fun DrawLineTest() {
    val start = Offset(100f, 100f)
    val end = Offset(900f, 900f)

    Canvas(modifier = Modifier.size(360.dp)) {
        drawLine(
            //线的颜色
            color = Color.Red,
            //起始点
            start = start,
            //末尾点
            end = end,
            //线宽
            strokeWidth = 30f,
            //线末端圆角
            cap = StrokeCap.Round
        
Compose框架下的Canvas组件中绘制太极图是一项有趣的任务,可以展示图形渲染能力以及对称设计技巧。 ### 步骤解析 #### 1. **设置画布** 首先需要创建一个`Box`容器,并在其内部放置一个`Canvas`组件。通过指定尺寸、颜色等属性,初始化绘图环境。 #### 2. **大圆背景** 使用`drawCircle()`函数绘制整个圆形区域作为太极的基础轮廓,通常选择黑白对比色来呈现经典效果。 #### 3. **分割线及小半圆** - 绘制一条竖直直线将画面分为左右两部分。 - 然后分别于左上角与右下角添加两个较小的半圆形填充对方的颜色,形成阴阳鱼眼的效果。 #### 4. **曲线路径构建阴阳形状** 利用贝塞尔曲线工具精确控制弧度和平滑过渡,生成标准S型分界线区分阳面和阴面。 以下是伪代码示例帮助理解: ```kotlin @Composable fun TaijiDiagram() { Canvas(modifier = Modifier.size(200.dp)) { val canvasWidth = size.width val canvasHeight = size.height // Draw main circle drawCircle(Color.Black, radius = canvasWidth / 2f) // S-shape curve for division line (simplified here) drawPath(Path().apply { moveTo(canvasWidth / 4f, 0f) cubicTo(... , ... ) }, color=Color.White) // Small circles as eyes of yin and yang fish drawCircle(...) drawCircle(...) } } ``` 由于实际操作涉及较多细节调整如坐标计算、颜色管理等,需结合具体需求逐步完善参数值。 --- **温馨提示**: Compose对于复杂的自定义图形支持良好,但仍建议初学者从简单案例入手熟悉API后再尝试更复杂图案制作!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

举儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值