天天看點

android paint設定字型方向,Android 自定義View學習(三)——Paint 繪制文字屬性

1. 實作字型垂直居中

(1)x 軸居中:

android paint設定字型方向,Android 自定義View學習(三)——Paint 繪制文字屬性

x軸居中.png

@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)這個方法,很容易拿到要繪制文字的寬度,再根據(getWidth()-stringWidth)/2簡單計算,就可以得到在X軸起始繪制坐标

(2)y 軸居中:

android paint設定字型方向,Android 自定義View學習(三)——Paint 繪制文字屬性

image.png

想要在Y軸居中,就要确定出繪制文字baseline時的所在Y軸的坐标。

在Android中,和文字高度相關的資訊都存在FontMetrics對象中。

确定 Y軸 中心:

android paint設定字型方向,Android 自定義View學習(三)——Paint 繪制文字屬性

y軸位置确定圖.png

由于文字繪制是從baseline開始,是以想要文字的正中心和DrawTextView的中心重合,baseline就不能和getHeight()/2重合,而且baseline要在getHeight()/2下方。

但要在下方多少?就是2号線和3号線之間的距離。

|ascent|=descent+ 2 * ( 2号線和3号線之間的距離 )

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

// 文字的x軸位置

float stringWidth = paint.measureText(text);

float x =(getWidth()-stringWidth)/2;

//文字的y軸坐标

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) 設定對齊方式

Paint.Align.LEFT 左對齊

Paint.Align.CENTER 中心對齊,繪制從

Paint.Align.RIGHT 右對齊

這個方法影響的是兩端的繪制起始。LEFT就是從左端開始,是以使用這三個屬性時,在drawText(test,x,y,paint);要注意x坐标,否則,繪制會出現錯亂

LEFT對應0,CENTER對應getWidth()/2, RIGHT對應getWidth()

2.2 setStyle() 設定畫筆樣式

Paint.Style.FILL 隻繪制圖形内容

Paint.Style.STROKE 隻繪制圖形輪廓(描邊)

Paint.Style.FILL_AND_STROKE 既繪制輪廓也繪制内容

android paint設定字型方向,Android 自定義View學習(三)——Paint 繪制文字屬性

Paint.Style.STROKE.png

2.3 setFlags(int flags) 設定畫筆的flag

ANTI_ALIAS_FLAG 抗鋸齒

DITHER_FLAG 防抖動

2.4 PathEffect setPathEffect(PathEffect effect) 設定路徑效果

android paint設定字型方向,Android 自定義View學習(三)——Paint 繪制文字屬性

7種路徑效果.png

需要注意的是,繪制路徑時,pathPaint.setStyle(Paint.Style.STROKE)畫筆的風格要空心,否則,後果畫出的不是線,而是一個不規則的區域。

這7種路徑效果,暫時還不能區分,先暫時知道有這麼7種效果,等到實作具體需求了再深入了解

CornerPathEffect 拐角處變圓滑

DashPathEffect 可以用來繪制虛線,用一個數組來設定各個點之間的間隔,phase控制繪制時數組的偏移量

PathDashPathEffect 和DashPathEffect類似 ,可以設定顯示的點的圖形,例如圓形的點

DisCreatePathEffect 線段上會有許多雜點

ComposePathEffect 組合兩個PathEffect,将兩個組合成一個效果

3 其他

剩下的方法,試一下就曉得效果了

setTextScaleX(float f) 設定縮放,0f到1f為縮小,大于1f為放大

setUnderlineText(booelan b) 設定下劃線

setStrikeThruText (boolean strikeThruText) 設定文本删除線

setTextSize(float f) 設定文字字型大小

getFontSpacing()得到行間距

descent()得到descent的值

ascent() 得到asccent的值

getLetterSpacing() 字母間距

關于字型的常用的方法差不多就這些了。漏掉的,用到了再補充。