系列文章传送门:
UI绘制-Paint(一)Paint基本属性及方法
UI绘制-Paint(二)颜色相关方法
UI绘制-Paint(三)图层混合模式
UI绘制-Paint(四)颜色过滤器 ColorFilter
mPaint = new Paint(); // 创建paint对象
mPaint.setColor(Color.RED);//设置颜色
mPaint.setARGB(255, 255, 255, 0); //设置Paint对象颜色,范围0~255
mPaint.setAlpha(200); // 设置alpha不透明度,范围0~255
mPaint.setAntiAlias(true); //抗锯齿
mPaint.setStyle(Paint.Style.STROKE); //描边效果
mPaint.setStrokeWidth(4); // 描边宽度,在 STROKE 和 FILL_AND_STROKE 下,可设置线条的宽度
mPaint.setStrokeCap(Paint.Cap.ROUND); // 圆角效果
mPaint.setStrokeJoin(Paint.Join.MITER); // 拐角风格
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); //设置图层混合模式
mPaint.setColorFilter(new LightingColorFilter(0x00ffff, 0x000000)); // 设置颜色过滤器
mPaint.setFilterBitmap(true); // 设置双线性过滤
mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL)); //设置画笔遮罩滤镜,传入度数和样式
mPaint.setTextScaleX(2); // 设置文本缩放倍数
mPaint.setTextSize(30); // 设置字体大小
mPaint.setTextAlign(Paint.Align.LEFT); // 对齐方式
mPaint.setUnderlineText(true); // 设置下划线
setPaintStyle(Paint.Style style)
设置绘制的 Style
- FILL 填充模式(默认)
- STROKE 是画线模式(即勾边模式)
- FILL_AND_STROKE 是两种模式一并使用:既画线又填充
setStrokeCap(Paint.Cap cap)
设置点的形状,但这个方法并不是专门用来设置点的形状的,而是一个设置线条端点形状的方法
- BUTT 平头(默认)
- ROUND 圆头
- SQUARE 方头
setStrokeJoin(Paint.Join join)
设置拐角风格
- MITER:默认
- ROUND
- BEVEL
setFilterBitmap(boolean filter)
设置是否使用双线性过滤来绘制 Bitmap
setPathEffect(PathEffect effect)
设置图形轮廓效果,对 Canvas 所有的图形绘制有效,也就是 drawLine() drawCircle() drawPath() 这些方法等
PathEffect
单一效果: CornerPathEffect DiscretePathEffect DashPathEffect PathDashPathEffect
组合效果: SumPathEffect ComposePathEffect
CornerPathEffect
它的构造方法 CornerPathEffect(float radius) 的参数 radius 是圆角的半径。
把所有拐角变成圆角DiscretePathEffect
把线条进行随机的偏离,让轮廓变得乱七八糟。乱七八糟的方式和程度由参数决定
DiscretePathEffect(float segmentLength, float deviation) 的两个参数中, segmentLength 是用来拼接的每个线段的长度, deviation 是偏离量。这两个值设置得不一样,显示效果也会不一样,具体的你自己多试几次就明白了,这里不再贴更多的图。DashPathEffect
使用虚线来绘制线条
它的构造方法 DashPathEffect(float[] intervals, float phase) 中, 第一个参数 intervals 是一个数组,它指定了虚线的格式:数组中元素必须为偶数(最少是 2 个),按照「画线长度、空白长度、画线长度、空白长度」……的顺序排列,例如上面代码中的 20, 5, 10, 5 就表示虚线是按照「画 20 像素、空 5 像素、画 10 像素、空 5 像素」的模式来绘制;第二个参数 phase 是虚线的偏移量。PathDashPathEffect
这个方法比 DashPathEffect 多一个前缀 Path ,所以顾名思义,它是使用一个 Path 来绘制「虚线」
setDither(boolean dither)
设置图像的抖动:true设置抖动(简单来说抖动更多的作用是在图像降低色彩深度绘制时,避免出现大片的色带与色块,看起来会更柔和)
字体
String string = "Android 开发";
Rect rect = new Rect();
mPaint.getTextBounds(string, 0 , string.length(), rect);//测量文本大小,将文本大小信息存放在rect中
mPaint.measureText(string);// 获取文本的宽
mPaint.getFontMetrics(); // 获取字体度量对象
字体的度量,是指对于指定字号的某种字体,在度量方面的各种属性,其描述参数包括:
- baseline:字符基线
- ascent: 字符最高点到baseline的推荐距离
- top: 字符最高点到baseline的最大距离
- descent:字符最低点到baseline的推荐距离
- bottom:字符最低点到baseline的最大距离
- leading:行间距,即前一行的descent与下一行ascent之间的距离
获取文本高度 descent - ascent