font
這是一個文字的坐標系
這是一個非常蛋疼的坐標系
在canvas中怎么才能把文字畫在正中間????下面我們來討論一下
canvas有個方法專門繪制文字
canvas.drawText(text , X, Y, mPaint); //這是比較常用的方法
左右居中很好實現,只要給Paint設置一下就好了
mPaint.setTextAlign(Paint.Align.CENTER);
這樣把你計算的文字的中心點的X坐標傳入canvas.drawText(text , X, Y, mPaint)就好;
但是Y軸的中心點就非常蛋疼了!!!
因為drawText方法傳入的Y參數的坐標既不是文字的底端(descent),也不是文字的中間,而是baseline的位置!!!!
++我們可以計算出文字居中后 中心點的Y軸坐標,但是怎么才能獲取baseline的Y軸坐標呢????++
唉...數學老師死得早....
/**
* FontMetrics中保存了文字的一些屬性
* 其中規定了baseline = 0
* 而其他值都是相對于baseline的坐標,這個坐標是一個文字自己的坐標系,與外部無關
*
* 我們來對照上面的圖來看看--------------------------------------
* public float top (這個是最上面,是個負值)
* public float ascent (這個是文字所繪制到的頂端,是個負數)
* public float descent (這個是文字所繪制到的底端,是個正數)
* public float bottom (這個是最下面,是個正數)
* ------------------------------------------------------------
* 好了,有了這些可以計算出baseline在繪制的時候的Y坐標了
*/
Paint.FontMetrics fm = mPaint.getFontMetrics();
//假設已經計算出文字上下居中后Y軸的坐標為 ---> y;
float textY = y + (fm.descent - fm.ascent) / 2 - fm.descent;
// --------------------------------------------------
好了如果以后需要自己繪制文字,而又想要居中的同學,這么計算就沒問題了!