標籤:text 計算公式 net desc 分享 參數 垂直置中 解決 ott
我們在android中經常會遇到自訂一些組件,因為現有的android組件是往往不能滿足當下的需求的,今天就給大家介紹一下在自訂群組建過程中用到的drawText不置中的問題的解決方案
首先大家看一下這種圖:
這就是一個文字完整的地區劃分圖,標示著完整的android在drawText的時候的書寫規則,那這些地區分別都是代表什麼意思呢?
1. 基準點是baseline
2. Ascent是baseline之上至字元最高處的距離
3. Descent是baseline之下至字元最低處的距離
4. Leading文檔說的很含糊,其實是上一行字元的descent到下一行的ascent之間的距離
5. Top指的是指的是最高字元到baseline的值,即ascent的最大值
6. 同上,bottom指的是最下字元到baseline的值,即descent的最大值
其中Baseline是我們在調用drawText的時候一個參數,又是在drawText的時候的一個基準線和輔助線,下面是drawText的時候需要傳的參數,根據注釋我們不難理解其欄位分別代表的意思:
text:要寫上去的文字
x:寫的起始點x的座標
y:baseline的座標
paint:畫筆
下面來看下這幅圖:
藍色的橫線指的是繪製Text的目標矩形的中點:targetRect.centerY() = (targetRect.bottom + targetRect.top)/2
textCenterVerticalBaselineY 就是繪製文本時候的y座標,targetRect.centerY()是控制項一半的高度。其實這個換算關係也不難理解,targetRect.centerY()-fm.descent的意思是將整個文字地區抬高到控制項的1/2,然後我們再加上(fm.descent - fm.ascent) / 2的意思就是將文本下沉文本descent到ascent長度的一半,從而實現文本垂直置中的目的。,不難看出計算公式應該為:
textCenterVerticalBaselineY = targetRect.centerY() + (fm.descent - fm.ascent) / 2- fm.descent ;
希望能夠對大家有所協助
參考原文:http://blog.csdn.net/wan778899/article/details/51460849
Android drawText 做到文字絕對置中