Android canvas drawText y-posición del texto
Estoy usando una lona para crear un dibujable con un cierto fondo y un poco de texto. El dibujable se utiliza como un compuesto dibujable dentro de un EditText.
El texto se dibuja vía drawText () en el lienzo, pero tengo un problema con la posición-y del texto dibujado en algunos casos. En esos casos se cortan partes de algunos caracteres (ver enlaces de imagen).
- Android - El botón de radio no muestra su texto
- Cómo escribir una matriz en un archivo de texto en el almacenamiento interno?
- Android Ver agregar niño
- Inconsistencia al establecer el tamaño de fuente de TextView en el código y en los recursos
- Cambiar el tamaño de la fuente en el objeto del botón Spinner real
Personajes sin problema de posicionamiento:
Http://i50.tinypic.com/zkpu1l.jpg
Personajes con problema de posicionamiento, el texto contiene 'g', 'j', 'q', etc .:
Http://i45.tinypic.com/vrqxja.jpg
Puede encontrar un fragmento de código para reproducir el problema a continuación.
¿Cualquier experto sabe cómo determinar el desplazamiento correcto para la posición y?
public void writeTestBitmap(String text, String fileName) { // font size float fontSize = new EditText(this.getContext()).getTextSize(); fontSize+=fontSize*0.2f; // paint to write text with Paint paint = new Paint(); paint.setStyle(Style.FILL); paint.setColor(Color.DKGRAY); paint.setAntiAlias(true); paint.setTypeface(Typeface.SERIF); paint.setTextSize((int)fontSize); // min. rect of text Rect textBounds = new Rect(); paint.getTextBounds(text, 0, text.length(), textBounds); // create bitmap for text Bitmap bm = Bitmap.createBitmap(textBounds.width(), textBounds.height(), Bitmap.Config.ARGB_8888); // canvas Canvas canvas = new Canvas(bm); canvas.drawARGB(255, 0, 255, 0);// for visualization // y = ? canvas.drawText(text, 0, textBounds.height(), paint); try { FileOutputStream out = new FileOutputStream(fileName); bm.compress(Bitmap.CompressFormat.JPEG, 100, out); } catch (Exception e) { e.printStackTrace(); } }
- Necesidad de formatear moneda para TextView
- Android ImageButton con imagen y texto
- Posible cambiar el tamaño de texto / color para ActionBar?
- Cómo agregar el botón de texto a la barra de acción
- Agregar cuadros de texto a una vista en android
- android - tipo de entrada de texto nombre de persona no está funcionando
- Envuelva texto fuera de la curva de bezier en android
- ¿Cómo encontrar el número de caracteres de TextView de Android por línea?
Creo que es probablemente un error asumir que textBounds.bottom = 0. Para aquellos caracteres descendentes, las partes inferiores de esos caracteres están probablemente por debajo de 0 (lo que significa textBounds.bottom> 0). Es probable que desee algo como:
canvas.drawText(text, 0, textBounds.top, paint); //instead of textBounds.height()
Si tu textBounds es de +5 a -5, y dibujas el texto en y = height (10), entonces solo verás la mitad superior del texto.
Creo que si quieres dibujar texto cerca de la esquina superior izquierda deberías hacer esto:
canvas.drawText(text, -textBounds.left, -textBounds.top, paint);
Y usted puede moverse alrededor del texto sumando la cantidad deseada del desplazamiento a las dos coordenadas:
canvas.drawText(text, -textBounds.left + yourX, -textBounds.top + yourY, paint);
La razón por la que esto funciona (al menos para mí) es que getTextBounds () le dice donde drawText () dibujaría el texto en el caso de que x = 0 ey = 0. Así que tienes que contrarrestar este comportamiento restando el desplazamiento (textBounds.left y textBounds.top) introducido por la forma en que se maneja el texto en Android.
En esta respuesta elaboro un poco más sobre este tema.
- Proguard Printmapping no funciona en Android Studio 2.0.0 (y 2.1.0)
- Cómo cambiar el tamaño del icono de elemento de menú en NavigationView?