1.Paint 属性
mPaint.setColor(Color.RED)//设置颜色
mPaint.isAntiAlias = true //是否抗锯齿
mPaint.setARGB(255, 255, 255, 0) //设置paint对象颜色 0-255
mPaint.alpha = 200 //设置透明度
mPaint.style = Paint.Style.STROKE // 描边填充效果 1.STROKE 描边 2.FIll 填充 3.FILL_AND_STROKE 描边+填充
mPaint.strokeWidth = 5F // 描边宽度
mPaint.strokeCap = Paint.Cap.SQUARE //圆角效果 1.STROKE 默认 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))//设置图层混合模式
mPaint.setColorFilter(LightingColorFilter(0xffffff, 0x235545)) //颜色过滤器
mPaint.isFilterBitmap = true //设置双线性过滤(比图一张很像马赛克的图片过滤后就柔和很多,马赛克变成模糊的)
mPaint.setMaskFilter(BlurMaskFilter(10F, BlurMaskFilter.Blur.INNER)) //画笔遮罩滤镜,传入度数和滤镜
mPaint.textScaleX = 2F //文本缩放
mPaint.textSize = 40F //文本大小
mPaint.textAlign = Paint.Align.CENTER //文本对齐方式
mPaint.isUnderlineText = true
val str = "我的学习之路"
var mRect = Rect()
mPaint.getTextBounds(str, 0, str.length, mRect) //将文本放到rect区域中
mPaint.measureText(str)//文本的宽度
mPaint.fontMetrics //获取字体的度量对象
2.属性详解
主要是用代码实现那些属性的效果
基本设置的代码
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 默认 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 默认 2.ROUND 在线条末尾加上半圆形 3.SQUARE 在线条末尾加上矩形
canvas?.drawLine(50F,50F,600F,50F,mPaint)
mPaint.strokeCap = Paint.Cap.ROUND//圆角效果 1.BUTT 默认 2.ROUND 在线条末尾加上半圆形 3.SQUARE 在线条末尾加上矩形
canvas?.drawLine(50F,150F,600F,150F,mPaint)
mPaint.strokeCap = Paint.Cap.SQUARE//圆角效果 1.BUTT 默认 2.ROUND 在线条末尾加上半圆形 3.SQUARE 在线条末尾加上矩形
canvas?.drawLine(50F,250F,600F,250F,mPaint)
}
3.渲染器
注意:Shader后面会做一个详细的讲解 开启传送门
1.简介
Shader.TileMode 三个类型
1.CLAMP
当填充区域大于填充物,会以填充物体最后一个像素水平或者垂直方向上的延申
2.REPEAT
以填充物水平和垂直方向上的复制平铺填充
3.MIRROR(镜像)
以填充物水平或者垂直方向上的翻转平铺填充
2.简单效果
setShader()这个方法后面还有个详细讲解

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)) //环形渲染器
canvas?.drawLine(50F,150F,600F,150F,mPaint)
}
2