Products
GG网络技术分享 2025-10-25 17:05 9
Canvas在Flutter中是一个有力巨大的绘图工具,它允许开发者以编程方式在屏幕上绘制各种图形和文本。
用Canvas,我们能为应用程序创建独特的自定义UI组件。比方说我们能用Canvas创建带有自定义绘图的开关按钮。

class CustomSwitchPainter extends CustomPainter {
final bool value;
CustomSwitchPainter;
@override
void paint {
Paint paint = Paint
..color = value ? Colors.green : Colors.grey
..style = PaintingStyle.fill;
canvas.drawRRect(
RRect.fromRectAndRadius, Radius.circular),
paint);
double switchWidth = size.width / 3;
double offset = value ? size.width - switchWidth : 0;
Paint switchPaint = Paint
..color = Colors.white
..style = PaintingStyle.fill;
canvas.drawCircle(
Offset,
size.height / 3 - 4,
switchPaint,
);
}
@override
bool shouldRepaint {
return true;
}
}
Canvas能用于创建跨平台的2D游戏。比方说我们能用Canvas创建一个轻巧松的飞行射击游戏。
@override
void paint {
Rect rect = Rect.fromLTWH;
Paint paint = Paint;
paint.color = Colors.red;
canvas.drawRect;
}
Canvas的Paint类包含一系列用于设置和修改画笔属性的方法和属性,比方说color、strokeWidth、strokeCap、strokeJoin等。
@override
void paint {
Paint paint = Paint;
paint.color = Colors.black;
paint.strokeWidth = 2;
paint.strokeCap = StrokeCap.round;
paint.strokeJoin = StrokeJoin.round;
canvas.drawLine, paint);
}
在Canvas中,TextPainter类用于绘制文本。能用TextStyle类设置文字的样式,比方说字体颜色、字体巨大细小、字体样式等。
@override
void paint {
Rect rect = Rect.fromLTWH;
Paint paint = Paint;
canvas.save;
canvas.translate;
canvas.rotate;
canvas.scale;
canvas.drawRect;
canvas.restore;
}
Canvas能用于很许多应用场景,比方说绘制图表,制作自定义的UI组件,创建游戏等。
说实在的, 基本上原因是正常Flutter在绘制Container的时候,AppBar已经帮我们计算了状态栏和标题栏高大度偏差,但我们这里在用Canvas时直接粗暴的drawRect,绘制出来的红色细小方框,左部和顶部起点均为0,其实是从状态栏开头计算绘制的。那如果我们调整位置呢?把起点top调整到300,出现了如下图的效果:纳尼?
红色细小方块居然画出去了明明Container只有绿色的巨大细小。其实这里的问题还是在于PaintingContext, 它有一个参数是estimatedBounds,而estimatedBounds正常是在创建时通过child.paintBounds赋值的,但是对于estimatedBounds还有如下的说说:原来画出去也是能。
用Matrix能进行Canvas上的几何变换。常用的变换包括平移,旋转,缩放。
文章浏览阅读2.1k次点赞13次收藏21次。本文聚焦Flutter开发中Canvas绘图。Canvas作为绘制2D图形工具,可绘制许多种元素,是CustomPainter子组件。介绍了绘制的保存恢复、 变换、渲染流水线、路径及画笔等内容,还提及在地图线路、AI图像转换等方面的应用。
Canvas的常用图形方法包括drawLine、drawRect、drawCircle、drawArc等。比方说 以下代码演示了怎么用Canvas绘制一个矩形:
@override
void paint {
Rect rect = Rect.fromLTWH;
Paint paint = Paint;
paint.color = Colors.red;
canvas.drawRect;
}
Canvas绘制区域内的坐标系原点在左上角,水平向右为x轴正方向,垂直向下为y轴正方向。
Canvas的绘制操作包括绘制线段、绘制点、绘制路径等。以下代码演示了怎么绘制线段:
canvas.drawLine, Offset, paint);
Canvas的TextPainter类用于绘制文本。以下代码演示了怎么在Canvas中绘制文本:
TextPainter textPainter = TextPainter(
text: TextSpan),
textDirection: TextDirection.ltr,
);
textPainter.layout;
textPainter.paint);
Canvas给了一系列用于创建和修改图形的方法和属性,包括绘制点、线、路径、矩形、圆形等。
class MyPainter extends CustomPainter {
@override
void paint {
Paint paint = Paint;
paint.color = Colors.red;
canvas.drawRect, paint);
}
@override
bool shouldRepaint {
return true;
}
}
Canvas是Flutter中一个有力巨大的绘图工具,它允许开发者以编程方式在屏幕上绘制各种图形和文本。通过学和掌握Canvas的用,开发者能创建出丰有钱许多彩的UI组件和游戏。
因为Flutter的不断进步,Canvas的功能将更加丰有钱和有力巨大。以后我们能期待Canvas在更许多场景下的应用,如AR/VR、地图渲染等。
欢迎用实际体验验证观点。
Demand feedback