Skip to content

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

TextLine представляет одну строку сформированного (shaped) текста. Обычно создается с помощью Shaper и предоставляет метрическую информацию и возможности проверки попадания (hit-testing), необходимые для создания текстовых редакторов или интерактивных меток.

Создание

java
// Сформировать одну строку текста
TextLine line = TextLine.make("Hello World", font);

Метрики

  • getAscent(): Расстояние от базовой линии до верха самого высокого глифа (отрицательное).
  • getDescent(): Расстояние от базовой линии до низа самого низкого глифа (положительное).
  • getCapHeight(): Высота заглавных букв.
  • getXHeight(): Высота строчной буквы 'x'.
  • getWidth(): Общая ширина строки (advance width).
  • getHeight(): Общая высота (descent - ascent).

Проверка попадания (Интерактивность)

TextLine предоставляет методы для преобразования между координатами в пикселях и смещениями символов.

java
// 1. Получить смещение по координате (Клик мыши)
float x = mouseEvent.getX();
int offset = line.getOffsetAtCoord(x); // Возвращает индекс символа в UTF-16
// 'offset' будет ближайшим к курсору мыши

// 2. Получить координату по смещению (Размещение курсора)
float cursorX = line.getCoordAtOffset(offset);
// Нарисовать курсор в точке (cursorX, baseline)
  • getOffsetAtCoord(x): Ближайшее смещение символа.
  • getLeftOffsetAtCoord(x): Смещение символа строго слева.
  • getCoordAtOffset(offset): X-координата в пикселях для заданного индекса символа.

Отрисовка

java
// Можно нарисовать строку напрямую
canvas.drawTextLine(line, x, y, paint);

// Или извлечь TextBlob для более ручного управления
try (TextBlob blob = line.getTextBlob()) {
    canvas.drawTextBlob(blob, x, y, paint);
}

Жизненный цикл

TextLine реализует Managed. Всегда закрывайте его по завершению работы, чтобы освободить нативные ресурсы.

java
try (TextLine line = TextLine.make(text, font)) {
    // ... используем line ...
}