通常情況下,我們自定義view的時候會經常繪製文字,但是在繪製文字的時候有不少注意點,不然可能繪製的效果和我們所期望的還是不一樣。
如何獲取文字的寬度
Rect textBounds = new Rect();
textPaint.getTextBounds(text, 0, text.length(), textBounds);
int textWidth = textBounds.getWidth();
複製程式碼
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);
複製程式碼