Continuando mejorando las respuestas de Dee y FrinkTheBrave. Agregué un Rect al método para permitir el dibujo dentro de un área de ancho particular. Verá cómo modificarlo para seleccionar un tamaño de fuente apropiado y asegurarse de que se ajuste dentro del área de altura correcta.
Esto le permitirá especificar el ancho de las líneas que desea escribir, lo que es muy útil para dividir una cadena de texto sin formato en líneas de longitud similares y dibujarlas en un lienzo.
private void drawMultilineText(String str, int x, int y, Paint paint, Canvas canvas, int fontSize, Rect drawSpace) {
int lineHeight = 0;
int yoffset = 0;
String[] lines = str.split(" ");
// set height of each line (height of text + 20%)
lineHeight = (int) (calculateHeightFromFontSize(str, fontSize) * 1.2);
// draw each line
String line = "";
for (int i = 0; i < lines.length; ++i) {
if(calculateWidthFromFontSize(line + " " + lines[i], fontSize) <= drawSpace.width()){
line = line + " " + lines[i];
}else{
canvas.drawText(line, x, y + yoffset, paint);
yoffset = yoffset + lineHeight;
line = lines[i];
}
}
canvas.drawText(line, x, y + yoffset, paint);
}
private int calculateWidthFromFontSize(String testString, int currentSize)
{
Rect bounds = new Rect();
Paint paint = new Paint();
paint.setTextSize(currentSize);
paint.getTextBounds(testString, 0, testString.length(), bounds);
return (int) Math.ceil(bounds.width());
}
private int calculateHeightFromFontSize(String testString, int currentSize)
{
Rect bounds = new Rect();
Paint paint = new Paint();
paint.setTextSize(currentSize);
paint.getTextBounds(testString, 0, testString.length(), bounds);
return (int) Math.ceil(bounds.height());
}
Esta respuesta incluye este excelente fragmento de código que se encuentra aquí en una respuesta anterior por user850688 https://stackoverflow.com/a/11353080/1759409
gracias. No sabía que no admite Newline. eso es realmente molesto ¿Qué quieres decir con tirar la nueva línea? – RoflcoptrException
Utilice String.replace() para reemplazar todas las instancias de "\ n" por "" (una cadena vacía). –
ah sí, ese no es el problema, el código anterior es la única situación en la que lo necesito;) y como pueden ver, agregó el "\ n" yo solo – RoflcoptrException