Skip to content

Referencia de API: TextLine

TextLine representa una sola línea de texto con forma (shaped). Normalmente se crea mediante el Shaper y proporciona información métrica y capacidades de prueba de aciertos (hit-testing) esenciales para construir editores de texto o etiquetas interactivas.

Creación

java
// Dar forma a una sola línea de texto
TextLine line = TextLine.make("Hello World", font);

Métricas

  • getAscent(): Distancia desde la línea base hasta la parte superior del glifo más alto (negativa).
  • getDescent(): Distancia desde la línea base hasta la parte inferior del glifo más bajo (positiva).
  • getCapHeight(): Altura de las letras mayúsculas.
  • getXHeight(): Altura de la 'x' minúscula.
  • getWidth(): Ancho total de avance de la línea.
  • getHeight(): Altura total (descent - ascent).

Prueba de Aciertos (Interacción)

TextLine proporciona métodos para mapear entre coordenadas de píxeles y desplazamientos de caracteres.

java
// 1. Obtener Desplazamiento desde una Coordenada (Clic)
float x = mouseEvent.getX();
int offset = line.getOffsetAtCoord(x); // Devuelve el índice del carácter UTF-16
// 'offset' será el más cercano al cursor del ratón

// 2. Obtener Coordenada desde un Desplazamiento (Colocación del Cursor)
float cursorX = line.getCoordAtOffset(offset);
// Dibujar un cursor en (cursorX, baseline)
  • getOffsetAtCoord(x): Desplazamiento de carácter más cercano.
  • getLeftOffsetAtCoord(x): Desplazamiento de carácter estrictamente a la izquierda.
  • getCoordAtOffset(offset): Coordenada X en píxeles para un índice de carácter dado.

Renderizado

java
// Puedes dibujar la línea directamente
canvas.drawTextLine(line, x, y, paint);

// O extraer el TextBlob para un control más manual
try (TextBlob blob = line.getTextBlob()) {
    canvas.drawTextBlob(blob, x, y, paint);
}

Ciclo de Vida

TextLine implementa Managed. Siempre ciérralo cuando hayas terminado para liberar recursos nativos.

java
try (TextLine line = TextLine.make(text, font)) {
    // ... usar line ...
}