1.Paint 屬性
mPaint.setColor(Color.RED)//設(shè)置顏色
mPaint.isAntiAlias = true //是否抗鋸齒
mPaint.setARGB(255, 255, 255, 0) //設(shè)置paint對(duì)象顏色 0-255
mPaint.alpha = 200 //設(shè)置透明度
mPaint.style = Paint.Style.STROKE // 描邊填充效果 1.STROKE 描邊 2.FIll 填充 3.FILL_AND_STROKE 描邊+填充
mPaint.strokeWidth = 5F // 描邊寬度
mPaint.strokeCap = Paint.Cap.SQUARE //圓角效果 1.STROKE 默認(rèn) 2.ROUND 在線條末尾加上半圓形 3.SQUARE 在線條末尾加上矩形
mPaint.strokeJoin = Paint.Join.MITER // 拐角 1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圓形
mPaint.setShader(SweepGradient(200F, 200F, Color.RED, Color.BLUE)) //渲染器
mPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.ADD))//設(shè)置圖層混合模式
mPaint.setColorFilter(LightingColorFilter(0xffffff, 0x235545)) //顏色過濾器
mPaint.isFilterBitmap = true //設(shè)置雙線性過濾(比圖一張很像馬賽克的圖片過濾后就柔和很多,馬賽克變成模糊的)
mPaint.setMaskFilter(BlurMaskFilter(10F, BlurMaskFilter.Blur.INNER)) //畫筆遮罩濾鏡,傳入度數(shù)和濾鏡
mPaint.textScaleX = 2F //文本縮放
mPaint.textSize = 40F //文本大小
mPaint.textAlign = Paint.Align.CENTER //文本對(duì)齊方式
mPaint.isUnderlineText = true
val str = "我的學(xué)習(xí)之路"
var mRect = Rect()
mPaint.getTextBounds(str, 0, str.length, mRect) //將文本放到rect區(qū)域中
mPaint.measureText(str)//文本的寬度
mPaint.fontMetrics //獲取字體的度量對(duì)象
2.屬性詳解
主要是用代碼實(shí)現(xiàn)那些屬性的效果
基本設(shè)置的代碼
var mPaint = Paint()
init {
mPaint.setARGB(255, 255, 0, 0)
mPaint.isAntiAlias = true //是否抗鋸齒
mPaint.style = Paint.Style.STROKE // 描邊填充效果 1.STROKE 描邊 2.FIll 填充 3.FILL_AND_STROKE 描邊+填充
mPaint.strokeWidth = 50F // 描邊寬度
}
1.拐角
以下從左到右邊的效果是: 1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圓形

001.jpg
override fun draw(canvas: Canvas?) {
super.draw(canvas)
strokeJoin(canvas)
}
fun strokeJoin(canvas: Canvas?){
mPaint.strokeJoin = Paint.Join.MITER // 拐角 1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圓形
canvas?.drawPath(strokeJoin(0),mPaint)
mPaint.strokeJoin = Paint.Join.BEVEL // 拐角 1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圓形
canvas?.drawPath(strokeJoin(1),mPaint)
mPaint.strokeJoin = Paint.Join.ROUND // 拐角 1.MITER 尖角 2.BEVEL 去掉尖角 3.ROUND 圓形
canvas?.drawPath(strokeJoin(2),mPaint)
}
fun strokeJoin(num:Int):Path{
var path = Path()
path.moveTo(300F*num+50F,50F)
path.lineTo(300F*num+250F,50F)
path.lineTo(300F*num+50F,200F)
return path
}
2.圓角
下圖從上到下分別是 圓角效果 1.BUTT 默認(rèn) 2.ROUND 在線條末尾加上半圓形 3.SQUARE 在線條末尾加

002.jpg
override fun draw(canvas: Canvas?) {
super.draw(canvas)
strokeCap(canvas)
}
fun strokeCap(canvas: Canvas?){
mPaint.strokeCap = Paint.Cap.BUTT//圓角效果 1.BUTT 默認(rèn) 2.ROUND 在線條末尾加上半圓形 3.SQUARE 在線條末尾加上矩形
canvas?.drawLine(50F,50F,600F,50F,mPaint)
mPaint.strokeCap = Paint.Cap.ROUND//圓角效果 1.BUTT 默認(rèn) 2.ROUND 在線條末尾加上半圓形 3.SQUARE 在線條末尾加上矩形
canvas?.drawLine(50F,150F,600F,150F,mPaint)
mPaint.strokeCap = Paint.Cap.SQUARE//圓角效果 1.BUTT 默認(rèn) 2.ROUND 在線條末尾加上半圓形 3.SQUARE 在線條末尾加上矩形
canvas?.drawLine(50F,250F,600F,250F,mPaint)
}
3.渲染器
注意:Shader后面會(huì)做一個(gè)詳細(xì)的講解 開啟傳送門
1.簡(jiǎn)介
Shader.TileMode 三個(gè)類型
1.CLAMP
當(dāng)填充區(qū)域大于填充物,會(huì)以填充物體最后一個(gè)像素水平或者垂直方向上的延申
2.REPEAT
以填充物水平和垂直方向上的復(fù)制平鋪填充
3.MIRROR(鏡像)
以填充物水平或者垂直方向上的翻轉(zhuǎn)平鋪填充
2.簡(jiǎn)單效果
setShader()這個(gè)方法后面還有個(gè)詳細(xì)講解

003.jpg
override fun draw(canvas: Canvas?) {
super.draw(canvas)
setShader(canvas)
}
fun setShader(canvas: Canvas?){
canvas?.drawLine(50F,50F,600F,50F,mPaint)
mPaint.setShader(SweepGradient(200F, 200F, Color.RED, Color.YELLOW)) //環(huán)形渲染器
canvas?.drawLine(50F,150F,600F,150F,mPaint)
}
2