UI绘制-Paint(一)Paint 基本属性及方法

269 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

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); // 设置下划线

Paint 常用属性

setPaintStyle(Paint.Style style)

设置绘制的 Style

  • FILL 填充模式(默认)
  • STROKE 是画线模式(即勾边模式)
  • FILL_AND_STROKE 是两种模式一并使用:既画线又填充

image.png

setStrokeCap(Paint.Cap cap)

设置点的形状,但这个方法并不是专门用来设置点的形状的,而是一个设置线条端点形状的方法

  • BUTT 平头(默认)
  • ROUND 圆头
  • SQUARE 方头

image.png

setStrokeJoin(Paint.Join join)

设置拐角风格

  • MITER:默认
  • ROUND
  • BEVEL

image.png

setFilterBitmap(boolean filter)

设置是否使用双线性过滤来绘制 Bitmap

image.png

setPathEffect(PathEffect effect)

设置图形轮廓效果,对 Canvas 所有的图形绘制有效,也就是 drawLine() drawCircle() drawPath() 这些方法等

PathEffect 有多种类型,其中单一效果: CornerPathEffect、DiscretePathEffect、DashPathEffect、PathDashPathEffect;组合效果: SumPathEffect ComposePathEffect

CornerPathEffect 把所有拐角变成圆角

public CornerPathEffect(float radius)

它的构造方法参数 radius 是圆角的半径。

DiscretePathEffect 把线条进行随机的偏离,让轮廓变得乱七八糟

public DiscretePathEffect(float segmentLength, float deviation)

这些乱七八糟的方式和程度由参数决定,segmentLength 是用来拼接的每个线段的长度, deviation 是偏离量。这两个值设置得不一样,显示效果也会不一样,具体的你自己多试几次就明白了,这里不再贴更多的图。

DashPathEffect 使用虚线来绘制线条

public 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之间的距离

image.png

获取文本高度 descent - ascent