參考: Paint 繪制文字屬性
1. 實(shí)現(xiàn)字體垂直居中
(1)x 軸居中:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//拿到字符串的寬度
float stringWidth = mPaint.measureText(text);
float x =(getWidth()-stringWidth)/2;
canvas.drawText(text, x ,getHeight()/2 ,mPaint);
}
利用measureText(String text)
這個(gè)方法干花,很容易拿到要繪制文字的寬度,再根據(jù)(getWidth()-stringWidth)/2
簡(jiǎn)單計(jì)算犯建,就可以得到在X軸起始繪制坐標(biāo)
(2)y 軸居中:
想要在Y軸居中,就要確定出繪制文字baseline
時(shí)的所在Y軸的坐標(biāo)。
在Android中嬉荆,和文字高度相關(guān)的信息都存在FontMetrics
對(duì)象中入蛆。
確定 Y軸 中心:
由于文字繪制是從baseline
開始响蓉,所以想要文字的正中心和DrawTextView
的中心重合,baseline
就不能和getHeight()/2
重合哨毁,而且baseline
要在getHeight()/2
下方枫甲。
但要在下方多少?就是2號(hào)線和3號(hào)線之間的距離扼褪。
|ascent|=descent+ 2 * ( 2號(hào)線和3號(hào)線之間的距離 )
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 文字的x軸位置
float stringWidth = paint.measureText(text);
float x =(getWidth()-stringWidth)/2;
//文字的y軸坐標(biāo)
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
float y = getHeight() / 2 + (Math.abs(fontMetrics.ascent) - fontMetrics.descent) / 2;
canvas.drawText(text, x ,y ,paint);
}
2. 其他方法
2.1 setTextAlign(Align align) 設(shè)置對(duì)齊方式
-
Paint.Align.LEFT
左對(duì)齊 -
Paint.Align.CENTER
中心對(duì)齊想幻,繪制從 -
Paint.Align.RIGHT
右對(duì)齊
這個(gè)方法影響的是兩端的繪制起始。LEFT
就是從左端開始话浇,所以使用這三個(gè)屬性時(shí)脏毯,在drawText(test,x,y,paint);
要注意x坐標(biāo),否則幔崖,繪制會(huì)出現(xiàn)錯(cuò)亂
LEFT
對(duì)應(yīng)0食店,CENTER
對(duì)應(yīng)getWidth()/2, RIGHT
對(duì)應(yīng)getWidth()
2.2 setStyle()
設(shè)置畫筆樣式
-
Paint.Style.FILL
只繪制圖形內(nèi)容 -
Paint.Style.STROKE
只繪制圖形輪廓(描邊) -
Paint.Style.FILL_AND_STROKE
既繪制輪廓也繪制內(nèi)容
Paint.Style.STROKE.png
2.3 setFlags(int flags) 設(shè)置畫筆的flag
-
ANTI_ALIAS_FLAG
抗鋸齒 -
DITHER_FLAG
防抖動(dòng)
2.4 PathEffect setPathEffect(PathEffect effect)
設(shè)置路徑效果
需要注意的是岖瑰,繪制路徑時(shí)叛买,
pathPaint.setStyle(Paint.Style.STROKE)
畫筆的風(fēng)格要空心,否則蹋订,后果畫出的不是線率挣,而是一個(gè)不規(guī)則的區(qū)域。
這7種路徑效果露戒,暫時(shí)還不能區(qū)分椒功,先暫時(shí)知道有這么7種效果捶箱,等到實(shí)現(xiàn)具體需求了再深入了解
-
CornerPathEffect
拐角處變圓滑 -
DashPathEffect
可以用來繪制虛線,用一個(gè)數(shù)組來設(shè)置各個(gè)點(diǎn)之間的間隔动漾,phase控制繪制時(shí)數(shù)組的偏移量 -
PathDashPathEffect
和DashPathEffect
類似 丁屎,可以設(shè)置顯示的點(diǎn)的圖形,例如圓形的點(diǎn) -
DisCreatePathEffect
線段上會(huì)有許多雜點(diǎn) -
ComposePathEffect
組合兩個(gè)PathEffect
旱眯,將兩個(gè)組合成一個(gè)效果
3 其他
剩下的方法晨川,試一下就曉得效果了
-
setTextScaleX(float f)
設(shè)置縮放,0f到1f為縮小删豺,大于1f為放大 -
setUnderlineText(booelan b)
設(shè)置下劃線 -
setStrikeThruText (boolean strikeThruText)
設(shè)置文本刪除線 -
setTextSize(float f)
設(shè)置文字字體大小 -
getFontSpacing()
得到行間距 -
descent()
得到descent的值 -
ascent()
得到asccent的值 -
getLetterSpacing()
字母間距
關(guān)于字體的常用的方法差不多就這些了共虑。漏掉的,用到了再補(bǔ)充呀页。