Класс Path
Класс Path хранит последовательность команд: перейти в точку, провести линию, замкнуть.
Готовый контур рисует Canvas или отдаёт его ClipPath для обрезки.
Контур сам по себе на экране не виден, пока его не нарисуют или не используют как границу.
Синтаксис
Path()
..moveTo(20, 80)
..lineTo(60, 20)
..lineTo(100, 80)
..close()
Методы
| Метод | Описание |
|---|---|
addOval |
Добавляет овальный контур. |
addRRect |
Добавляет скруглённый прямоугольник. |
addRect |
Добавляет прямоугольный контур. |
arcToPoint |
Добавляет дугу к точке. |
close |
Замыкает контур линией к началу. |
contains |
Проверяет, лежит ли точка внутри контура. |
cubicTo |
Добавляет кубическую кривую Безье. |
getBounds |
Возвращает прямоугольник, в который вписан весь контур. |
lineTo |
Проводит отрезок к новой точке. |
moveTo |
Переносит начало контура в точку. |
quadraticBezierTo |
Добавляет квадратичную кривую. |
relativeLineTo |
Сдвигает текущую точку относительно. |
reset |
Очищает Path для нового контура.
|
Пример
Давайте построим треугольник:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: CustomPaint(
size: const Size(220, 100),
painter: _PathDemo(),
),
),
),
),
);
}
class _PathDemo extends CustomPainter
{
@override
void paint(Canvas canvas, Size size)
{
final path = Path()..moveTo(110, 15)..lineTo(200, 85)..lineTo(20, 85)..close();
canvas.drawPath(path, Paint()..color = Colors.indigo);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
На экране синий треугольник.
Пример
Давайте обведём контур:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: CustomPaint(
size: const Size(220, 100),
painter: _PathStroke(),
),
),
),
),
);
}
class _PathStroke extends CustomPainter
{
@override
void paint(Canvas canvas, Size size)
{
final path = Path()..addOval(Rect.fromLTWH(40, 15, 140, 70));
canvas.drawPath(
path,
Paint()..color = Colors.orange..style = PaintingStyle.stroke..strokeWidth = 4,
);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
На экране оранжевый овал-контур.
Смотрите также
-
класс
Paint,
кисть холста -
класс
Canvas,
холст внутриCustomPainter -
перечисление
BoxShape,
прямоугольник или круг -
перечисление
BorderStyle,
есть линия или нет