flutter_Canvas绘制基本图形
创建 CustomPaint
CustomPaint(
size: Size(
200,
200,
),
painter: null,
foregroundPainter: ForegroundPainter(),
child: null,
)
创建 ForegroundPainter
import 'package:flutter/material.dart';
class ForegroundPainter extends CustomPainter {
Paint painter = Paint()
..isAntiAlias = true
..strokeCap = StrokeCap.round
..strokeJoin = StrokeJoin.round
..style = PaintingStyle.stroke
..color = Colors.red
..strokeWidth = 4;
ForegroundPainter();
@override
void paint(Canvas canvas, Size size) {
}
@override
bool shouldRepaint(ForegroundPainter oldDelegate) {
return true;
}
}
flutter_Canvas绘制基本图形
1. 画直线
void paint(Canvas canvas, Size size) {
Offset p1 = Offset(0, 0);
Offset p2 = Offset(100, 100);
canvas.drawLine(Offset(0, 0), Offset(100, 100), painter);
Rect r = Rect.fromLTRB(p1.dx, p1.dy, p2.dx, p2.dy);
canvas.drawRect(r, painter);
RRect rr = RRect.fromLTRBXY(p1.dx, p1.dy, p2.dx, p2.dy, 10, 10);
canvas.drawRRect(rr, painter);
canvas.drawCircle(p1, (p1.dx - p2.dx).abs(), painter);
r = Rect.fromLTRB(p1.dx, p1.dy, p2.dx, p2.dy);
canvas.drawOval(r, painter);
Path path = Path();
path.moveTo((p1.dx + (p1.dx - p2.dx).abs() / 2).abs(), p1.dy);
path.lineTo(p1.dx, p2.dy);
path.lineTo(p2.dx, p2.dy);
path.lineTo((p1.dx + (p1.dx - p2.dx).abs() / 2).abs(), p1.dy);
canvas.drawPath(path, painter);
path = Path();
path.moveTo((p1.dx + (p1.dx - p2.dx).abs() / 2).abs(), p1.dy);
path.lineTo(p1.dx, p1.dy + ((p2.dy - p1.dy) / 2).abs());
path.lineTo(p1.dx + ((p2.dx - p1.dx) / 2).abs(), p2.dy);
path.lineTo(p2.dx, p1.dy + ((p2.dy - p1.dy) / 2).abs());
path.lineTo((p1.dx + (p1.dx - p2.dx).abs() / 2).abs(), p1.dy);
canvas.drawPath(path, painter);
}