Справочник 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 ...
}