Android drawText 做到文字絕對居中



        我們在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


 
    歡迎關注我的簡書博客,地址是:
 
     http://www.jianshu.com/u/da06e00edefa
 
 
    歡迎大家關注我的微信公眾號,我會定期發布一些博客,分享一些知識點。
     
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM