下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年酒店業(yè)中央空調(diào)安裝與運營合同3篇
- 網(wǎng)上書店系課程設(shè)計
- 探索漢字主題課程設(shè)計
- 2024年虛擬現(xiàn)實游戲內(nèi)容開發(fā)與授權(quán)合同
- 二零二五年度個人裝修合同免責(zé)條款說明細則3篇
- 籃球課程設(shè)計方案
- 2024年裝修輔材代購權(quán)責(zé)協(xié)議3篇
- 二零二五年度倉儲物流中心建筑租賃合同2篇
- 二零二五年度專業(yè)搬家服務(wù)合同模板2篇
- 二零二五年度健康醫(yī)療用地房屋及土地使用權(quán)轉(zhuǎn)讓協(xié)議3篇
- 產(chǎn)品進入醫(yī)院的程序及方法
- 司機勞務(wù)合同
- 搭乘私家車免責(zé)協(xié)議書
- 行測言語理解與表達真題及完整答案1套
- 某冶金機械修造廠全廠總壓降變電所及配電系統(tǒng)設(shè)計
- 2024年社區(qū)工作者考試必背1000題題庫【含答案】
- 2022年北京豐臺初二(上)期末語文試卷及答案
- 醫(yī)院安全生產(chǎn)年終總結(jié)
- 2013年4月自考00814中國古代文論選讀試題及答案含解析
- 2024年度-全新事業(yè)單位內(nèi)部控制培訓(xùn)
- 天津市近幾年高考數(shù)學(xué)(文科)試卷知識點總結(jié)
評論
0/150
提交評論