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

前言

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

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


通常來說,使用 Canvas 繪制文本,可以通過畫筆 Paint 來設置文字的大小。但是畫筆的大小與文字的寬高并無直接關系。
大家應該能說上幾種測量文字寬高的方法,如:


方案1. 通過 Paint 的 measureText 方法,可以測量文字的寬度


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


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


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


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


我們通過以下測試代碼,分別測試字母 "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)頁名稱:Android精確測量文本寬高及基線位置的方法-創(chuàng)新互聯(lián)
標題鏈接:http://muchs.cn/article20/cesijo.html

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

廣告

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

h5響應式網(wǎng)站建設