Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
293 of 1024 menu
◀ ▶

Метод saveLayer

Метод saveLayer класса Canvas рисует в отдельный слой с прозрачностью. Новые команды попадают в слой, а не сразу на холст. Кисть Paint слоя задаёт прозрачность, когда слой потом сольют обратно.

Синтаксис

canvas.saveLayer(bounds, paint)

Параметры

Параметр Описание
bounds Прямоугольник слоя, Rect.
paint Кисть Paint. Из неё берутся цвет, толщина и то, заливка это или контур.

Пример

Давайте вызовем saveLayer на CustomPaint:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: CustomPaint( size: const Size(220, 100), painter: _SaveLayerPainter(), ), ), ), ), ); } class _SaveLayerPainter extends CustomPainter { @override void paint(Canvas canvas, Size size) { canvas.saveLayer(Rect.fromLTWH(0, 0, size.width, size.height), Paint()); canvas.drawCircle(Offset(80, 50), 30, Paint()..color = Colors.red.withValues(alpha: 0.5)); canvas.drawCircle(Offset(120, 50), 30, Paint()..color = Colors.blue.withValues(alpha: 0.5)); canvas.restore(); } @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(280, 120), painter: _SaveLayerPainter2(), ), ), ), ), ); } class _SaveLayerPainter2 extends CustomPainter { @override void paint(Canvas canvas, Size size) { canvas.saveLayer(Rect.fromLTWH(0, 0, size.width, size.height), Paint()); canvas.drawCircle(Offset(80, 50), 30, Paint()..color = Colors.red.withValues(alpha: 0.5)); canvas.drawCircle(Offset(120, 50), 30, Paint()..color = Colors.blue.withValues(alpha: 0.5)); canvas.restore(); } @override bool shouldRepaint(covariant CustomPainter oldDelegate) => false; }

На экране та же фигура в более широком CustomPaint.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить