前言
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括香格里拉網(wǎng)站建設(shè)、香格里拉網(wǎng)站制作、香格里拉網(wǎng)頁(yè)制作以及香格里拉網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(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ò)畫(huà)筆 Paint 來(lái)設(shè)置文字的大小。但是畫(huà)筆的大小與文字的寬高并無(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è)名稱(chēng):Android精確測(cè)量文本寬高及基線位置的方法-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://jinyejixie.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)
猜你還喜歡下面的內(nèi)容