![【移動應(yīng)用開發(fā)技術(shù)】Baseline算法如何在Android項目中使用_第1頁](http://file4.renrendoc.com/view/9ec675a09c164be28e5b271da86fff2b/9ec675a09c164be28e5b271da86fff2b1.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Baseline算法如何在Android項目中使用_第2頁](http://file4.renrendoc.com/view/9ec675a09c164be28e5b271da86fff2b/9ec675a09c164be28e5b271da86fff2b2.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Baseline算法如何在Android項目中使用_第3頁](http://file4.renrendoc.com/view/9ec675a09c164be28e5b271da86fff2b/9ec675a09c164be28e5b271da86fff2b3.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Baseline算法如何在Android項目中使用
這篇文章將為大家詳細講解有關(guān)Baseline算法如何在Android項目中使用,文章內(nèi)容質(zhì)量較高,因此在下分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。引言Baseline是文字繪制時所參照的基準(zhǔn)線,只有先確定了Baseline的位置,我們才能準(zhǔn)確的將文字繪制在我們想要的位置上。Baseline的概念在我們使用TextView等系統(tǒng)控件直接設(shè)置文字內(nèi)容時是用不到的,但是如果我們想要在Canvas畫布上面繪制文字時,Baseline的概念就必不可少了。我們先了解一下Android中Canvas畫布繪制文字的方法,如下圖:參數(shù)示意:text,文字內(nèi)容x,文字從畫布上開始繪制的x坐標(biāo)(Canvas是一個原點在左上角的平面坐標(biāo)系)y,Baseline所在的y坐標(biāo),不少人已開始以為y是繪制文字區(qū)域的底部坐標(biāo),其實是不正確的,這是兩個概念paint,畫筆,設(shè)置的文字的大小顏色等屬性了解了文字繪制的方法,我們現(xiàn)在就了解一下這個參數(shù)y(Baseline)的計算方法。Baseline的概念我們先看一行文字各區(qū)域的分布示意圖從上圖來看,Baseline不難理解,它就是E和h的下邊界線。我們還可以得出一個結(jié)論,文字的高度=Descent+Ascent。然而,上面這個公式并不完全準(zhǔn)確,我們再看一個圖:我們看到,如果文字的上方有一些特殊的符號,比如上圖中的~或者是我們漢語拼音中的聲調(diào)時,文字區(qū)域又會多出一部分Leading。因此,完整的公式應(yīng)該是文字的高度=Descent+Ascent+Leading。文字的高度=Descent+Ascent+Leading。那么,為什么第一幅圖中沒有說明Leading的存在呢,原因是我們通常在繪制一行英文或者中文時,Leading的高度為0。我們看一個證據(jù)圖,下圖是在繪制英文文字時調(diào)試取得的數(shù)據(jù)。其中l(wèi)eading=0,所以我們在文字繪制時不需要考慮Leading,圖中的數(shù)值都是距離Baseline的距離,在Baseline上方為負值,下方為正值。Baseline位置(y軸坐標(biāo))的計算為了方便我們對計算過程進行理解,我畫了一幅幫助圖,如下:假設(shè)我們是在畫布Canvas的頂部繪制一行文字,規(guī)定一行文字的高度是y,文字區(qū)域的高度是Height(TOP和BOTTOM之間,TOP到0和BOTTOM到y(tǒng)的距離相等,這樣文字才看起來是居中)。因此,0到y(tǒng)和TOP到BOTTOM的中線是重合的,y軸坐標(biāo)都是y/2。我們要繪制一行文字時,設(shè)計必然會告訴我們0到y(tǒng)的距離,所以中線的位置也是固定的y/2,那么我們設(shè)置了Paint的文字大小后,Ascent和Descent又能直接得到,就可以算出中線到基線的距離,公式如下:基線到中線的距離=(Descent+Ascent)/2-Descent基線到中線的距離=(Descent+Ascent)/2-Descent注意,實際獲取到的Ascent是負數(shù)。公式推導(dǎo)過程如下:中線到BOTTOM的距離是(Descent+Ascent)/2,這個距離又等于Descent+中線到基線的距離,即(Descent+Ascent)/2=基線到中線的距離+Descent。有了基線到中線的距離,我們只要知道任何一行文字中線的位置,就可以馬上得到基線的位置,從而得到Canvas的drawText方法中參數(shù)y的值。附Android獲取中線到基線距離的代碼,Paint需要設(shè)置文字大小textsize。
/**
*
計算繪制文字時的基線到中軸線的距離
*
*
@param
p
*
@param
centerY
*
@return
基線和centerY的距離
*/
public
static
float
getBaseline(Paint
p)
{
FontMetrics
fontMetrics
=
p.getFontMetrics();
return
(fontMetrics.descent
-
fontMetrics.ascent)
/
2
-fontMetrics.descent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公司年會領(lǐng)導(dǎo)發(fā)言稿范文(17篇)
- 2024-2025學(xué)年廣東省梅州市平遠縣實驗中學(xué)高三上學(xué)期9月月考歷史試卷
- 2024-2025學(xué)年第17課挽救民族危亡的斗爭-勤徑學(xué)升高中歷史必修上同步練測(統(tǒng)編版2019)
- 2025年以車抵押還款協(xié)議書范本
- 2025年個人項目委托合同
- 2025年臨時展覽館場地租賃合同范文
- 2025年涂料助劑:流平劑項目申請報告模范
- 2025年企業(yè)會議設(shè)備租賃合同范本
- 2025年個人與團隊共同成長策劃協(xié)議
- 2025年全場景住宅交易居間合同模板
- 血透室護理質(zhì)控
- 粵語課程設(shè)計
- 人美版四年級上冊美術(shù)(全冊)教案
- 10S505 柔性接口給水管道支墩
- 移動寬帶注銷委托書模板需要a4紙
- 初一下冊期末模擬物理質(zhì)量檢測試卷解析1
- 《教育向美而生-》讀書分享課件
- 中海地產(chǎn)總部-員工考核手冊
- 左卡尼汀在減輕高原反應(yīng)中的應(yīng)用
- 青海省西寧市選調(diào)生考試(行政職業(yè)能力測驗)綜合能力測試題匯編
評論
0/150
提交評論