系列文章傳送門:
UI繪制-Paint(一)Paint基本屬性及方法
UI繪制-Paint(二)顏色相關(guān)方法
UI繪制-Paint(三)圖層混合模式
UI繪制-Paint(四)顏色過濾器 ColorFilter
mPaint = new Paint(); // 創(chuàng)建paint對象
mPaint.setColor(Color.RED);//設(shè)置顏色
mPaint.setARGB(255, 255, 255, 0); //設(shè)置Paint對象顏色,范圍0~255
mPaint.setAlpha(200); // 設(shè)置alpha不透明度,范圍0~255
mPaint.setAntiAlias(true); //抗鋸齒
mPaint.setStyle(Paint.Style.STROKE); //描邊效果
mPaint.setStrokeWidth(4); // 描邊寬度,在 STROKE 和 FILL_AND_STROKE 下,可設(shè)置線條的寬度
mPaint.setStrokeCap(Paint.Cap.ROUND); // 圓角效果
mPaint.setStrokeJoin(Paint.Join.MITER); // 拐角風(fēng)格
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); //設(shè)置圖層混合模式
mPaint.setColorFilter(new LightingColorFilter(0x00ffff, 0x000000)); // 設(shè)置顏色過濾器
mPaint.setFilterBitmap(true); // 設(shè)置雙線性過濾
mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL)); //設(shè)置畫筆遮罩濾鏡,傳入度數(shù)和樣式
mPaint.setTextScaleX(2); // 設(shè)置文本縮放倍數(shù)
mPaint.setTextSize(30); // 設(shè)置字體大小
mPaint.setTextAlign(Paint.Align.LEFT); // 對齊方式
mPaint.setUnderlineText(true); // 設(shè)置下劃線
setPaintStyle(Paint.Style style)
設(shè)置繪制的 Style
- FILL 填充模式(默認(rèn))
- STROKE 是畫線模式(即勾邊模式)
- FILL_AND_STROKE 是兩種模式一并使用:既畫線又填充

setStrokeCap(Paint.Cap cap)
設(shè)置點(diǎn)的形狀,但這個方法并不是專門用來設(shè)置點(diǎn)的形狀的,而是一個設(shè)置線條端點(diǎn)形狀的方法
- BUTT 平頭(默認(rèn))
- ROUND 圓頭
- SQUARE 方頭

setStrokeJoin(Paint.Join join)
設(shè)置拐角風(fēng)格
- MITER:默認(rèn)
- ROUND
- BEVEL

setFilterBitmap(boolean filter)
設(shè)置是否使用雙線性過濾來繪制 Bitmap

setPathEffect(PathEffect effect)
設(shè)置圖形輪廓效果,對 Canvas 所有的圖形繪制有效,也就是 drawLine() drawCircle() drawPath() 這些方法等
PathEffect
單一效果: CornerPathEffect DiscretePathEffect DashPathEffect PathDashPathEffect
組合效果: SumPathEffect ComposePathEffect
CornerPathEffect
它的構(gòu)造方法 CornerPathEffect(float radius) 的參數(shù) radius 是圓角的半徑。
把所有拐角變成圓角DiscretePathEffect
把線條進(jìn)行隨機(jī)的偏離,讓輪廓變得亂七八糟。亂七八糟的方式和程度由參數(shù)決定
DiscretePathEffect(float segmentLength, float deviation) 的兩個參數(shù)中, segmentLength 是用來拼接的每個線段的長度, deviation 是偏離量。這兩個值設(shè)置得不一樣,顯示效果也會不一樣,具體的你自己多試幾次就明白了,這里不再貼更多的圖。DashPathEffect
使用虛線來繪制線條
它的構(gòu)造方法 DashPathEffect(float[] intervals, float phase) 中, 第一個參數(shù) intervals 是一個數(shù)組,它指定了虛線的格式:數(shù)組中元素必須為偶數(shù)(最少是 2 個),按照「畫線長度、空白長度、畫線長度、空白長度」……的順序排列,例如上面代碼中的 20, 5, 10, 5 就表示虛線是按照「畫 20 像素、空 5 像素、畫 10 像素、空 5 像素」的模式來繪制;第二個參數(shù) phase 是虛線的偏移量。PathDashPathEffect
這個方法比 DashPathEffect 多一個前綴 Path ,所以顧名思義,它是使用一個 Path 來繪制「虛線」
setDither(boolean dither)
設(shè)置圖像的抖動:true設(shè)置抖動(簡單來說抖動更多的作用是在圖像降低色彩深度繪制時,避免出現(xiàn)大片的色帶與色塊,看起來會更柔和)
字體
String string = "Android 開發(fā)";
Rect rect = new Rect();
mPaint.getTextBounds(string, 0 , string.length(), rect);//測量文本大小,將文本大小信息存放在rect中
mPaint.measureText(string);// 獲取文本的寬
mPaint.getFontMetrics(); // 獲取字體度量對象
字體的度量,是指對于指定字號的某種字體,在度量方面的各種屬性,其描述參數(shù)包括:
- baseline:字符基線
- ascent: 字符最高點(diǎn)到baseline的推薦距離
- top: 字符最高點(diǎn)到baseline的最大距離
- descent:字符最低點(diǎn)到baseline的推薦距離
- bottom:字符最低點(diǎn)到baseline的最大距離
- leading:行間距,即前一行的descent與下一行ascent之間的距離

獲取文本高度 descent - ascent