25.Flutter:成为Canvas绘制大师(一)

本文是《Flutter快速上手指南》先导篇,介绍了Flutter中Canvas的常用绘制操作。先说明了Canvas的绘制坐标系,原点在左上角,x轴向右、y轴向下为正方向。接着详细介绍了绘制线段、点、路径、矩形、圆角矩形和嵌套圆角矩形等操作及示例。

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

目录传送门:《Flutter快速上手指南》先导篇

本篇会介绍一些 Flutter 中 Canvas 的常用绘制操作。

Canvas 的绘制坐标系

上图是 Canvas 绘制区域内的坐标系。

原点在左上角,水平向右为 x 轴正方向,垂直向下为 y 轴正方向。

常用绘制操作

绘制线段drawLine()

绘制线段。

? e.g.:

canvas.drawLine(Offset(10, 10), Offset(250, 250), paint);
复制代码

? 效果:

线段的宽度通过 Paint.strokeWidth 属性可以设置线段的宽度。

绘制点drawPoints()

绘制一系列的点,可以链接成线段。

? e.g.:

canvas.drawPoints(
    ui.PointMode.points,
    [Offset(200, 200), Offset(250, 250), Offset(50, 200), Offset(100, 250)],
    paint);
复制代码

? 效果:

默认情况下,点是方形的。

如果想要绘制原点,只需要配置 paint.strokeCap=StrokeCap.round 即可。

? 效果:

如果设置 ui.PointMode.polygon,这些点就会按照点数组顺序,从前往后的链接。

canvas.drawPoints(
    ui.PointMode.polygon,
    [Offset(200, 200), Offset(250, 250), Offset(50, 200), Offset(100, 250)],
    paint);
复制代码

? 效果:

绘制路径drawPath()

绘制一个路径。

Path 有很多的方法去构建路径,这里不展开了,可以参考:Path API

? e.g.:

Path path = Path();
path.moveTo(100, 100);
path.lineTo(200, 200);
path.lineTo(250, 200);
path.lineTo(200, 250);
canvas.drawPath(path, paint);
复制代码

? 效果:

闭合路径 path.close()

? 效果:

设置填充效果 paint..style=PaintingStyle.fill

? 效果:

绘制矩形drawRect()

绘制矩形。

你需要提供一个 Rect,当然创建 Rect 的方式也很多,可以参考:Rect API

? e.g.:

 Rect rect = Rect.fromCircle(
     center: Offset(size.width / 2, size.height / 2), radius: 100);
 canvas.drawRect(rect, paint);
复制代码

? 效果:

设置填充效果 paint..style=PaintingStyle.fill

? 效果:

绘制圆角矩形drawRRect()

绘制圆角矩形。

你需要提供一个 RRect,当然创建 RRect 的方式也很多,可以参考:RRect API

你也可以用这个方法来实现 drawRect() 的效果,只要把圆角设为 0。

? e.g.:

Rect rect1 = Rect.fromCircle(
    center: Offset(size.width / 2, size.height / 2), radius: 150);
RRect rRect = RRect.fromRectAndRadius(rect1, Radius.circular(20));
canvas.drawRRect(rRect, paint);
复制代码

? 效果:

绘制嵌套圆角矩形drawDRRect()

绘制嵌套的圆角矩形。

⚠️ 第一个参数 outer 必须比第二个参数 inner 要大,否则就不显示了。

? e.g.:

Rect rect1 = Rect.fromCircle(
    center: Offset(size.width / 2, size.height / 2), radius: 140);
Rect rect2 = Rect.fromCircle(
    center: Offset(size.width / 2, size.height / 2), radius: 160);
RRect rRect1 = RRect.fromRectAndRadius(rect1, Radius.circular(20));
RRect rRect2 = RRect.fromRectAndRadius(rect2, Radius.circular(20));
canvas.drawDRRect(rRect2, rRect1, paint);
复制代码

? 效果:

设置填充效果 paint..style=PaintingStyle.fill

? 效果:

好了,本篇就到这了。

你可以花些时间编写一下这些代码,运行起来感受下效果。

想要学习的更多,请看下一篇。

目录传送门:《Flutter快速上手指南》先导篇

如何找到我?

传送门:CoorChice 的主页

传送门:CoorChice 的 Github


转载于:https://juejin.im/post/5c94c53de51d4556964a4905

Flutter CanvasFlutter 框架提供的个功能强大的绘图 API,它允许你直接在屏幕上绘制图形、文本和其他视觉元素。你可以使用 Flutter Canvas 创建自定义的 UI 控件、动画效果以及图表等。 通过 Flutter Canvas,你可以使用各种绘图方法来绘制形状、路径、渐变、图片和文本等。你可以使用 Canvas 类提供的方法来绘制直线、曲线、圆形、矩形等基本形状,还可以使用 Path 类来创建复杂的路径。同时,你也可以设置画笔的样式、颜色和透明度等属性,来实现各种视觉效果。 在 Flutter 中使用 Canvas,你需要在自定义的绘制方法中重写父类的 paint 方法,并将 Canvas 对象作为参数传入。然后,你可以在这个方法中使用 Canvas 对象提供的方法来绘制你想要的图形。 例如,下面是个简单的 Flutter Canvas 绘制个红色圆形的示例代码: ```dart import 'package:flutter/material.dart'; class MyCanvasWidget extends StatelessWidget { @override Widget build(BuildContext context) { return CustomPaint( painter: MyPainter(), ); } } class MyPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { final paint = Paint() ..color = Colors.red ..style = PaintingStyle.fill; final center = Offset(size.width / 2, size.height / 2); final radius = size.width / 4; canvas.drawCircle(center, radius, paint); } @override bool shouldRepaint(covariant CustomPainter oldDelegate) { return false; } } ``` 这段代码定义了个自定义的绘制 Widget `MyCanvasWidget`,并在其 `paint` 方法中使用 Canvas 绘制个红色的圆形。在 FlutterUI 树中使用 `CustomPaint` 包裹这个自定义的绘制 Widget,即可将这个绘制效果显示在屏幕上。 希望这个简单的示例可以帮助你了解 Flutter Canvas 的基本使用方法。如果你有更多关于 Flutter Canvas 的问题,欢迎继续提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值