Android drawText 做到文字絕對置中

來源:互聯網
上載者:User

標籤: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 做到文字絕對置中

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.