Android Paint 枚举/常量
前面几章节,我们屡次用到 mPaint.setStyle(Paint.Style.FILL_AND_STROKE)
本章节我们就来讲讲 Paint.Style
还有它的兄弟们 Paint.Cap
和 Paint.Join
我们可以通过设置这些值来设置特定的效果,比如 画笔样式 ,Join图形结合方式
Paint 有以下几类枚举和常量
static final Style[] sStyleArray = { Style.FILL, Style.STROKE, Style.FILL_AND_STROKE }; static final Cap[] sCapArray = { Cap.BUTT, Cap.ROUND, Cap.SQUARE }; static final Join[] sJoinArray = { Join.MITER, Join.ROUND, Join.BEVEL }; static final Align[] sAlignArray = { Align.LEFT, Align.CENTER, Align.RIGHT };
Paint.Style 枚举
Paint.Style
相关的调用代码(带有参构造方法的枚举)
public enum Style { //定义枚举,通过括号赋值 FILL (0), STROKE (1), FILL_AND_STROKE (2); //有参构造方法 Style(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; } //设置画笔Style的方法 public void setStyle(Style style) { native_setStyle(mNativePaint, style.nativeInt); } //JNI设置画笔风格的方法,这里我们无需关注 private static native void native_setStyle(long native_object, int style);
Paint.Style
设置画笔的样式,可选的值有
值 | 说明 |
---|---|
FILL | 默认,填充内部 |
STROKE | 只描边 |
FILL_AND_STROKE | 填充内部与描边 |
方法调用
setStyle(Paint.Style style)
对应效果
Paint.Cap
设置笔触风格,设置画笔始末端的图形(画笔开始画的第一点与最后一点),可选值
值 | 说明 |
---|---|
BUTT | 笔触是长方形且不超过路径(默认) |
ROUND | 笔触是圆形 |
SQUARE | 笔触是正方形 |
方法调用
setStrokeCap(Paint.Cap cap)
对应效果:平时我们直接画的是第一个,其它两个会比普通的多一点而外的区域,第二个 是圆角,第三个是矩形
Paint.Join
用于设置接合处的状态,假如线是由多条小线拼接而成,拼接处的形状,可选值
值 | 说明 |
---|---|
MITER | 默认,接合处为锐角 |
ROUND | 接合处为圆弧 |
BEVEL | 接合处为直线 |
方法调用
setStrokeJoin(Paint.Join join)
一般圆弧用得多,可参见之前的 擦掉美女衣服 Demo
setStrokeMiter(float miter)
这个方法则是设置笔画的倾斜度,miter > = 0
如小时候用的铅笔,削的时候斜与垂直削出来的笔尖效果是不一样的
主要是用来设置笔触的连接处的样式
可以和 setStrokeJoin()
来比较比较
Paint.Align
用于设置绘制文本的对其方式,就是相对于绘制文字的 [x,y] 起始坐标
可选的值有
值 | 说明 |
---|---|
LEFT | 在起始坐标的左边绘制文本 |
RIGHT | 在起始坐标的右边绘制文本 |
CENTER | 以其实坐标为中心绘制文本 |
方法调用
setTextAlign(Paint.Align align)
对应效果 另外可调用 setTextSize()
设置绘制文本的大小
Paint.FontMetrics 和 Paint.FontMetricsInt
用于字体属性及测量,另外这两个方法是一样的,只是后者取到的值是一个整形
这里我们选 FontMetricsInt 来给大家讲解下,有下面这五个常量值
这里参考的基准点是:下划线的位置( Baseline )
值 | 说明 |
---|---|
top | 最高字符到 baseline 的距离,即 ascent 的最大值 |
ascent | 字符最高处的距离到 baseline 的值 |
descent | 下划线到字符最低处的距离 |
bottom | 下划线到最低字符的距离,即 descent 的最大值 |
leading | 上一行字符的 descent 到下一行的 ascent 之间的距离 |
我们看几个图帮助理解下
然后我们随意画一串字母,把这些值打印出来
canvas.drawText("abcdefghijklnmopqrstuvwxyz", 400, 400, mPaint1); Log.e("HEHE", mPaint1.getFontMetricsInt().toString());
运行下,我们可以看到,打印出来的 Log 如下