Skip to content

Справочник API: TextBlob и Builder

TextBlob — это неизменяемое, оптимизированное представление набора глифов. Это самый быстрый способ рисования текста в Skija, если макет текста (позиции глифов) не меняется.

TextBlob

TextBlob объединяет глифы, позиции и шрифты в единый объект, который можно повторно использовать.

Свойства

  • getBounds(): Возвращает консервативную ограничивающую рамку блоба.
  • getUniqueId(): Возвращает уникальный идентификатор для кэширования.
  • serializeToData(): Сериализует блоб в объект Data.

Создание из позиций

Если вы уже рассчитали позиции глифов (например, с помощью Shaper или вручную), вы можете создать блоб напрямую.

java
// Только горизонтальные позиции (y постоянен)
TextBlob blob = TextBlob.makeFromPosH(glyphs, xPositions, y, font);

// Полные позиции (x, y) для каждого глифа
TextBlob blob2 = TextBlob.makeFromPos(glyphs, points, font);

// RSXform (Поворот + Масштаб + Сдвиг) для каждого глифа
TextBlob blob3 = TextBlob.makeFromRSXform(glyphs, xforms, font);

Отрисовка

java
canvas.drawTextBlob(blob, x, y, paint);

TextBlobBuilder

TextBlobBuilder позволяет построить TextBlob, добавляя несколько "серий" (runs) текста. "Серия" — это последовательность глифов, которые используют один и тот же шрифт и Paint.

Базовое использование

java
TextBlobBuilder builder = new TextBlobBuilder();

// Добавить серию текста
builder.appendRun(font, "Hello ", 0, 0);

// Добавить другую серию (например, с другим стилем или позицией)
builder.appendRun(boldFont, "World!", 100, 0);

// Построить неизменяемый TextBlob
TextBlob blob = builder.build();

Расширенное добавление

  • appendRun(font, glyphs, x, y, bounds): Добавляет глифы с общим началом координат.
  • appendRunPosH(...): Добавляет глифы с явными позициями X.
  • appendRunPos(...): Добавляет глифы с явными позициями (X, Y).
  • appendRunRSXform(...): Добавляет глифы с полными аффинными преобразованиями (поворот/масштаб).

Совет по производительности

Если вы рисуете один и тот же абзац текста несколько раз (даже если холст перемещается), создайте TextBlob один раз и используйте его повторно. Это позволяет избежать повторного вычисления позиций и форм глифов.