2013-03-21 25 views
0

當我有一個擴展的類查看如何繪製文本到該視圖的中心?要繪製文本我正在使用canvas.drawText,但由於繪製後無法移動文本,所以我不知道如何將文本居中。因此,我將如何在Android視圖類如何在android視圖類中居中文本?

回答

1

文本居中在精神,Maver1ck的在正確的軌道上,儘管它在實踐中比這更困難一點。你需要建立一個TextPaint,做一些測量:

TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG); 
paint.setTextAlign(Paint.Align.CENTER); //Draw text from center 
//setup any text size or color attributes 

現在,以確定如何垂直居中的文本。你想集中在可見的文本?你想要中心的基線?你想要基於文本頂部還是上升中心?文字很複雜。對於簡單的情況下,我們只能說,我們將底部與字體的頂部之間的中心(注意,這不是絕對頂部和底部 - 這將是上升和下降):

//Do this somewhere where you can cache it -- no need to do this on every draw. 
//onSizeChanged() is a good place. 

FontMetrics metrics = paint.getFontMetrics(); 
float height = Math.abs(metrics.top - metrics.bottom); 
float x = getWidth()/2; 
float y = (getHeight()/2) + (height/2); 

然後,在你的onDraw()

canvas.drawText("My Text", x, y, paint); 
0
Paint mPaint = new Paint(); 
mPaint.setARGB(200, 254, 0, 0); //example 
mPaint.setTextAlign(Align.CENTER); 
int positionX = (canvas.getWidth()/2); 
int positionY = (int) ((canvas.getHeight()/2) - ((mPaint.descent() + mPaint.ascent())/2)) ; 
canvas.drawText("Hello", positionX, positionY, mPaint); 
+0

但是,不會只是從文本開始位置居中不是整個文本? – user1762507 2013-03-21 00:49:26

+1

我編輯了我的答案。凌晨2點在這裏,對不起 – Droidman 2013-03-21 00:51:06