Android精確測(cè)量文本寬高及基線位置的方法-創(chuàng)新互聯(lián)

前言

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括香格里拉網(wǎng)站建設(shè)、香格里拉網(wǎng)站制作、香格里拉網(wǎng)頁(yè)制作以及香格里拉網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,香格里拉網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到香格里拉省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

筆者最近在做一款彈幕控件,里面涉及到繪制文本,以及文本邊框。而繪制文本邊框需要知道文本的左邊位置,上邊位置,以及文本的寬高。


通常來(lái)說(shuō),使用 Canvas 繪制文本,可以通過(guò)畫筆 Paint 來(lái)設(shè)置文字的大小。但是畫筆的大小與文字的寬高并無(wú)直接關(guān)系。
大家應(yīng)該能說(shuō)上幾種測(cè)量文字寬高的方法,如:


方案1. 通過(guò) Paint 的 measureText 方法,可以測(cè)量文字的寬度


方案2. 通過(guò)獲取 Paint 的 FontMetrics, 根據(jù) FontMetrics 的 leading, ascent, 和 descent可以獲取文字的高度。


方案3. 通過(guò) Paint 的 getTextBounds 獲取文本的邊界矩形 Rect,根據(jù) Rect 可以計(jì)算出文字的寬高。


方案4. 通過(guò) Paint 獲取文字的 Path, 根據(jù) Path 獲取文本的邊界矩形 Rect, 根據(jù) Rect 可以計(jì)算出文字的寬高。


表面上看,我們有以上四種方案可以獲取文字的寬或高。但是不幸的,這四種方案里,有些方法獲取到的數(shù)值不是真實(shí)的文字寬高。


我們通過(guò)以下測(cè)試代碼,分別測(cè)試字母 "e" 和 "j"。


private void measureText(String str) {
 if (str == null) {
  return;
 }
 float width2 = mPaint.measureText(str);
 Log.i("lxc", "width2 ---> " + width2);

 Paint.FontMetrics fontMetrics = mPaint.getFontMetrics();
 float height1 = Math.abs(fontMetrics.leading + fontMetrics.ascent) + fontMetrics.descent;
 Log.i("lxc", "height1 ---> " + height1);

 Rect rect = new Rect();
 mPaint.getTextBounds(str, 0, str.length(), rect);
 float width3 = rect.width();
 float height2 = rect.height();
 Log.i("lxc", "width3 ---> " + width3);
 Log.i("lxc", "height2 ---> " + height2);


 Path textPath = new Path();
 mPaint.getTextPath(str, 0, str.length(), 0.0f, 0.0f, textPath);
 RectF boundsPath = new RectF();
 textPath.computeBounds(boundsPath, true);
 float width4 = boundsPath.width();
 float height3 = boundsPath.height();
 Log.i("lxc", "width4 ---> " + width4);
 Log.i("lxc", "height3 ---> " + height3);
}

網(wǎng)頁(yè)名稱:Android精確測(cè)量文本寬高及基線位置的方法-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://bm7419.com/article20/cesijo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站建設(shè)、App設(shè)計(jì)自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)