[Android] drawText 位置如何計算

指間沙似流年發表於2017-12-23

通常情況下,我們自定義view的時候會經常繪製文字,但是在繪製文字的時候有不少注意點,不然可能繪製的效果和我們所期望的還是不一樣。

如何獲取文字的寬度

Rect textBounds = new Rect();
textPaint.getTextBounds(text, 0, text.length(), textBounds);
int textWidth = textBounds.getWidth();
複製程式碼

baseLine

baseLine 座標系

圖中我們可以看到drawText的y並不是高度的一半,而是文字的基線。 從圖中我們可以看到baseLine為0,向下為正,向上為負,所以bottom是正值,top是負值,那麼我們如何計算基線的位置呢:

基線的位置 = 高度的一半 + ((bottom - top) / 2 - bottom)

Paint.FontMetricsInt fontMetricsInt = mTextPaint.getFontMetricsInt();
int dy = (fontMetricsInt.bottom - fontMetricsInt.top) / 2 - fontMetricsInt.bottom;
int baseLine = getHeight() / 2 + dy;
複製程式碼

繪製文字

這個時候我們就可以很愉快的繪製文字了:

canvas.drawText(text, x, baseLine, mTextPaint);
複製程式碼

相關文章