安卓drawText中的坑

2021-07-27 20:12:42 字數 1677 閱讀 2691

安卓中在canvas.drawtext()時發現很多需要注意的問題:

paint mpaint = new paint(paint.anti_alias_flag);

mpaint.settextalign(paint.align

.left);

.center);

初始化paint物件時可以指定文字對齊方式,先討論預設情況(也就是paint.align.left)。

通過paint物件可以獲得與文字相關的兩個重要的物件:

//獲取可包裹文字的最小矩形(left,top,right,bottom指的是相對基準點的值,而不是實際的矩形的位置座標)

rect bounds=new rect();

mpaint.gettextbounds(text,0,text.length(),bounds);

//獲取fontmetrics物件

fontmetrics mfontmetrics =mpaint.getfontmetrics();

fontmetrics物件在安卓中的解釋:

為了能直觀的看出這些值的含義,我將這些值的相對位置畫了出來:

相應的引數解釋如下圖:

無論是bounds(left,top,right,bottom)還是fontmetrics(top,ascent,descent,bottom)都是相對於基準點的數值差

因此,在繪製文字,並且要求文字中心在(x,y)處時,可以如下處理:

public

class drawtextutil

}

最後,附上繪製對應線的**

public

class

drawtext

extends

view

public

drawtext(context context, attributeset attrs)

public

drawtext(context context, attributeset attrs, int defstyleattr)

public

drawtext(context context, attributeset attrs, int defstyleattr, int defstyleres)

public

void

init(context context)

@override

protected

void

ondraw(canvas canvas)

安卓開發遇到的坑

最近接了乙個外包開發的專案,在這個專案上做ui調整和新功能開發。遇到乙個getbackground setalpha 改變背景顏色的問題。晚上提交完 第二天執行發現專案中的所有對話方塊 dialog,popwindow 背景全部變成透明效果了。然後就感覺肯定是不小心改變主題樣式什麼的。但是檢視所有的...

安卓掉坑記錄

將含 litepal.xml 檔案的 assets 資料夾放到 main 資料夾下,編輯一下 xml 檔案 直觀上看是沒有刪除某個檔案,產生的ioexception異常,實際上是因為上次編譯導致的快取沒有清空導致的。進入到android目錄下執行下面 清除上次打包時的快取 gradlew.bat c...

安卓中sharedperference的用法

引數 sharedperference 使用步驟 1.獲取到 sp this.getsharedpreferences config 0 2.獲取編輯器 editor editor sp.edit 3.editor.putstring key,value putint putdouble 4.edi...