Paint
Дескриптор стиля команд отрисовки, настраивающий цвет, толщину обводки, режимы заливки/контура, Porter-Duff смешивание и пунктирные линии.
Обзор и архитектура
Paint описывает визуальный стиль векторных фигур, геометрических контуров, текстур и теней в UniGUI.
Основные возможности
- Цвет: Инкапсулирует компонент цвета RGBA (
ColorView) с возможностью цепочечной настройки. - Тип отрисовки: Переключает между сплошной заливкой (
stroke = false) и контурной обводкой (stroke = true) заданной толщины. - Смешивание цветов: Управляет аппаратным блендингом через
BlendMode(NORMAL, ADDITIVE, MULTIPLY, SCREEN). - Пунктир: Настраивает пунктирные штрихи (
dash(length, gap)) и фазу смещения паттерна (dashOffset).
Семантика копирования при записи
Класс Paint спроектирован как изменяемый (mutable) объект для удобной цепочечной настройки параметров в fluent-стиле.
При этом архитектура буферизованных команд UniGUI гарантирует полную изоляцию:
[!NOTE] Когда
DrawScopeзаписываетDrawCommand, он внутренне копирует текущее состояниеPaint. Любые последующие изменения вашего объектаPaintникогда не повлияют на команды, уже добавленные в буфер текущего кадра.
Режимы заливки и обводки
Для быстрого создания используйте статические фабричные методы:
// Сплошная заливка фигуры:
Paint fillPaint = Paint.fill(ColorView.rgb(255, 100, 0));
// Контурная обводка (толщиной 2.0 UI-пикселя):
Paint borderPaint = Paint.stroke(ColorView.WHITE, 2.0f);
В высокочастотных циклах рендеринга, где важна экономия памяти, рекомендуется использовать методы DrawScope#rectFilled(...), DrawScope#rectStroke(...), принимающие ColorView напрямую без создания объектов.
Режимы смешивания (Blend Modes)
Настроить аппаратное смешивание цветов можно с помощью paint.blend(BlendMode):
| Режим смешивания | Основное применение | Визуальный эффект |
|---|---|---|
BlendMode.NORMAL |
Стандартные элементы UI, полупрозрачные панели | Обычное наложение цвета с учётом альфа-канала |
BlendMode.ADDITIVE |
Магическое свечение, искры, неоновые лазеры | Цвет источника прибавляется к фону, создавая яркий свет |
BlendMode.MULTIPLY |
Мягкие реалистичные тени, затенение окружения | Цвета перемножаются, затемняя нижележащий фон |
BlendMode.SCREEN |
Мягкие блики, голограммы | Инвертированное умножение для плавного высветления |
Пунктир и бегущие рамки
Для обводки контуров поддерживается настройка пунктира в UI-пикселях:
Paint dashPaint = Paint.stroke(ColorView.rgb(0, 180, 255), 1.5f)
.dash(6.0f, 4.0f) // 6px штрих, 4px промежуток
.dashOffset((System.currentTimeMillis() / 20.0f) % 10.0f); // анимированная бегущая рамка
Метод clearDash() возвращает непрерывную сплошную линию.
Анимированная рамка выделения
// Создаём анимированную пунктирную рамку
float animPhase = (System.currentTimeMillis() % 1000) / 100.0f;
Paint selectionPaint = Paint.stroke(ColorView.rgb(80, 160, 255), 2.0f)
.dash(5.0f, 5.0f)
.dashOffset(animPhase);
RectView bounds = widget.layoutBounds();
scope.roundedRect(bounds.x(), bounds.y(), bounds.width(), bounds.height(), 4.0f, selectionPaint);
Светящаяся сфера с аддитивным блендингом
// Аддитивное свечение вокруг иконки
Paint glowPaint = Paint.fill(ColorView.rgba(0, 220, 255, 90))
.blend(BlendMode.ADDITIVE);
scope.circle(centerX - 16, centerY - 16, 32, 32, glowPaint);
API
Фабричные методы и конструктор
| Метод | Описание |
|---|---|
Paint() |
Создаёт новый Paint с белой заливкой, стандартным режимом смешивания и без обводки. |
fill(ColorView) |
Создаёт Paint для сплошной заливки фигур указанным цветом. |
stroke(ColorView, float) |
Создаёт Paint для контурной обводки с заданным цветом и толщиной. |
Paint()
Создать Paint по умолчанию
Создаёт новый Paint с белой заливкой, стандартным режимом смешивания и без обводки.
Paint::fill(ColorView)
Создать Paint для заливки
Создаёт Paint для сплошной заливки фигур указанным цветом.
| Параметр | Тип | Описание |
|---|---|---|
color |
ColorView |
Цвет для геометрии или тонирования. |
Возвращает Paint: Новый экземпляр Paint в режиме заливки..
Paint::stroke(ColorView, float)
Создать Paint для обводки
Создаёт Paint для контурной обводки с заданным цветом и толщиной.
| Параметр | Тип | Описание |
|---|---|---|
color |
ColorView |
Цвет для геометрии или тонирования. |
width |
float |
Толщина линии контура в UI-пикселях. |
Возвращает Paint: Новый экземпляр Paint в режиме обводки..
Цвет и режим заливки
| Метод | Описание |
|---|---|
color() |
Возвращает изменяемый объект цвета этого Paint. |
color(ColorView) |
Обновляет цвет Paint из переданного ColorView. |
Paint::color()
Получить цвет
Возвращает изменяемый объект цвета этого Paint.
Возвращает MutableColor: Ссылка на внутренний объект MutableColor..
Paint::color(ColorView)
Задать цвет
Обновляет цвет Paint из переданного ColorView.
| Параметр | Тип | Описание |
|---|---|---|
color |
ColorView |
Цвет для геометрии или тонирования. |
Возвращает Paint: Текущий экземпляр Paint для цепочечного вызова..
Обводка и толщина линий
| Метод | Описание |
|---|---|
strokeWidth() |
Возвращает толщину обводки в UI-пикселях. |
strokeWidth(float) |
Устанавливает толщину обводки в UI-пикселях. |
isStroke() |
Возвращает true, если Paint настроен на отрисовку контуров, а не сплошной заливки. |
stroke(boolean) |
Переключает между контурной обводкой и сплошной заливкой. |
Paint::strokeWidth()
Получить толщину обводки
Возвращает толщину обводки в UI-пикселях.
Возвращает float: Толщина обводки в UI-пикселях..
Paint::strokeWidth(float)
Задать толщину обводки
Устанавливает толщину обводки в UI-пикселях.
| Параметр | Тип | Описание |
|---|---|---|
strokeWidth |
float |
Толщина линии контура в UI-пикселях. |
Возвращает Paint: Текущий экземпляр Paint для цепочечного вызова..
Paint::isStroke()
Проверить режим обводки
Возвращает true, если Paint настроен на отрисовку контуров, а не сплошной заливки.
Возвращает boolean: True для режима обводки, false для режима заливки..
Paint::stroke(boolean)
Переключить режим обводки
Переключает между контурной обводкой и сплошной заливкой.
| Параметр | Тип | Описание |
|---|---|---|
stroke |
boolean |
True для режима обводки, false для режима заливки. |
Возвращает Paint: Текущий экземпляр Paint для цепочечного вызова..
Смешивание и режимы прозрачности
| Метод | Описание |
|---|---|
blendMode() |
Возвращает текущий режим аппаратного смешивания цветов. |
blend(BlendMode) |
Устанавливает режим аппаратного смешивания цветов. |
Paint::blendMode()
Получить режим смешивания
Возвращает текущий режим аппаратного смешивания цветов.
Возвращает BlendMode: Установленный режим BlendMode..
Paint::blend(BlendMode)
Задать режим смешивания
Устанавливает режим аппаратного смешивания цветов.
| Параметр | Тип | Описание |
|---|---|---|
blendMode |
BlendMode |
Режим аппаратного смешивания цветов или null для стандартного NORMAL. |
Возвращает Paint: Текущий экземпляр Paint для цепочечного вызова..
Пунктирные линии
| Метод | Описание |
|---|---|
dashed() |
Возвращает true, если обводка будет рисоваться пунктиром. |
dashLength() |
Возвращает длину видимого сегмента пунктира в пикселях. |
dashGap() |
Возвращает длину пустого промежутка между штрихами. |
dashOffset() |
Возвращает фазовое смещение паттерна пунктира. |
dash(float, float) |
Задаёт длину видимого штриха и пустого промежутка для обводки. |
dashOffset(float) |
Устанавливает смещение фазы пунктира для анимации бегущих линий. |
clearDash() |
Удаляет пунктирный паттерн, возвращая сплошную линию. |
Paint::dashed()
Проверить пунктирный режим
Возвращает true, если обводка будет рисоваться пунктиром.
Возвращает boolean: True, если длина штриха и промежутка больше нуля..
Paint::dashLength()
Получить длину штриха
Возвращает длину видимого сегмента пунктира в пикселях.
Возвращает float: Длина штриха в UI-пикселях..
Paint::dashGap()
Получить длину промежутка
Возвращает длину пустого промежутка между штрихами.
Возвращает float: Длина промежутка в UI-пикселях..
Paint::dashOffset()
Получить смещение пунктира
Возвращает фазовое смещение паттерна пунктира.
Возвращает float: Смещение фазы пунктира в UI-пикселях..
Paint::dash(float, float)
Настроить пунктирный паттерн
Задаёт длину видимого штриха и пустого промежутка для обводки.
| Параметр | Тип | Описание |
|---|---|---|
length |
float |
Длина видимого штриха пунктира в UI-пикселях. |
gap |
float |
Длина пустого промежутка между штрихами в UI-пикселях. |
Возвращает Paint: Текущий экземпляр Paint для цепочечного вызова..
Paint::dashOffset(float)
Задать смещение пунктира
Устанавливает смещение фазы пунктира для анимации бегущих линий.
| Параметр | Тип | Описание |
|---|---|---|
dashOffset |
float |
Фазовое смещение паттерна пунктира в UI-пикселях. |
Возвращает Paint: Текущий экземпляр Paint для цепочечного вызова..
Paint::clearDash()
Сбросить пунктир
Удаляет пунктирный паттерн, возвращая сплошную линию.
Возвращает Paint: Текущий экземпляр Paint для цепочечного вызова..
Копирование и управление состоянием
| Метод | Описание |
|---|---|
copy() |
Создаёт независимую точную копию этого Paint со всеми параметрами. |
Paint::copy()
Клонировать Paint
Создаёт независимую точную копию этого Paint со всеми параметрами.
Возвращает Paint: Независимая копия Paint..