Android Paint 枚举/常量

前面几章节,我们屡次用到 mPaint.setStyle(Paint.Style.FILL_AND_STROKE)

本章节我们就来讲讲 Paint.Style 还有它的兄弟们 Paint.CapPaint.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 如下

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.