日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android之DrawText详解

發布時間:2023/12/4 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android之DrawText详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你經常使用Canvas的draw***方法去繪制一些圖像圖形,繪制的坐標是從Canvas左上角開始計算的,如果想要把一個圖像放到某個位置,直接drawBitmap傳遞圖片左上角的坐標就行了。那drawText就不一樣,如果你傳遞進去字符串,會發現文字的位置和你指定的不一樣。

Android的文檔也沒有仔細說,打開源碼一看,又跑到native代碼里去執行了。


對于一段文字來說,如果你想把他畫到Canvas上,首先你要確定這段文字的范圍,即寬度和高度,那么怎么去取這一段的高度呢,如果你在網上搜,會有很多種答案,具體應該用哪一種呢?這要看你到底需要什么樣的尺寸了。

Paint.getTextBounds: 當你通過這個方法來獲取尺寸的時候,你可以得到能夠包裹文字的最小矩形,就是圖中紅色邊框的那部分,你可以得到一個Rect對象,包含這個最小尺寸的幾個值。坑其實就在這里:這里的Rect對象坐標并不是以左上角為準的,而是相對于左邊中間靠下位置的一個點,就是圖中的黃色五角星。而這里水平的Baseline指的是字符串對齊的一條線。既然這樣,r.top就是一個負值了,r.bottom會是一個小一點的正值,r.left和r.right在圖中畫的都很清楚。通過r.width()和r.height()來獲取尺寸。

那么文字的偏移就好說了,比如說你要把文字畫在Canvas的左上角,坐標是(0,0),但是當你通過:

1 canvas.drawText(“dangwen”,0,0,paint);

來畫文字的時候,發現只有文字的下半部分畫出來了,因為你傳遞進去的參數應該是以Baseline為標準的,正確的方法是:

1 canvas.drawText(“dangwen”,-r.left,-r.top,paint);

Paint.getFontMetricsInt(): 當你通過這里方法來獲取尺寸的時候,你獲取的只是一個垂直方向上的尺寸,這里的ascent代表的是字體的上部,descent代表的是字體的下部,這里需要注意的是這和上面獲得的Rect的top和bottom不太一樣,他們比比ascent和descent距離稍微小一些,這些具體的高度可能和不同的字體和渲染方式有關系,這里就不深入了 #我是不懂#。

然后如果把文字寫入TextView(圖中藍色部分)并且設置TextView的高度和寬度設為wrap_content,那么TextView的高度就正好是FontMetricsInt.top – FontMetricsInt.bottom, 那寬度呢? Paint.measureText()。


創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Android之DrawText详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。