2011-06-11 10 views
5

Así que uso Canvas.drawText para dibujar una cadena en un Lienzo. El problema es que quiero dibujar un rectángulo antes de que aparezca para que el texto aparezca centrado en el rectángulo. Pero llegué a un problema real. El suministrada x y y coordina a drawText en realidad no son de la "parte superior izquierda " esquina del texto real, sino más bien en la línea donde comienzan los personajes. Hay un método Paint.getTextBounds que devuelve un rectángulo "con origen implícito" en (0,0) del texto que se dibujará. El problema es que el origen está en (0,0). El ancho y la altura de esa caja son correctos, pero no sé cómo colocar su esquina superior izquierda en la esquina superior izquierda de la cadena que se dibuja en el lienzo. Supongo que debería usar FontMetrics, pero como muchos de los valores de FontMetrics no están documentados, no estoy seguro de cómo usarlos para mi propósito.Encaja un rectángulo alrededor de una cadena en un lienzo de Android

Respuesta

12

que terminé haciendo

FontMetrics fm = new FontMetrics(); 
paint.setTextAlign(Paint.Align.CENTER); 
paint.getFontMetrics(fm); 
canvas.drawText(text, x, y + -(fm.ascent + fm.descent)/2, paint); 

Que en realidad dibuja el texto centrado en x, y. Antes de que dibujo un rectángulo centrado en x, y con un ancho de paint.measureText (texto)

+0

He tenido problemas para dibujar el texto de ese centro en un rectángulo por un tiempo. ¡Muchas gracias! –

1

tratar rectángulo dibujo utilizando

canvas.drawRect(x, y - Paint.GetTextSize(), x + Paint.measureText("text"), y, Paint);

+0

Creo que esto funcionaría, aunque terminé haciendo otra cosa que también trabajó para mí por lo que ahora No puedo intentarlo para ver si este método funciona. Gracias de todos modos :) –

+0

¿Qué es esto x y y? – ranjith

+0

En este contexto, x e y son donde OP está dibujando texto, la respuesta es dibujar un recuadro alrededor de este texto. – eyespyus

Cuestiones relacionadas