Paint枚举、常量值、阴影效果、字体

导航 Android Paint之颜色过滤器
Paint之shader(图像渲染)
Paint之PathEffect(路径效果)
Paint API之—— MaskFilter(面具)
android之绘图工具类详解
Paint API之—— Xfermode与PorterDuff全面详解
Paint API之—— Xfermode与PorterDuff详解(三)动画效果
Paint枚举、常量值、阴影效果、字体
本节引言: 在绘图工具类这节课中,Paint的方法参数那里我们就接触到 了这样几个东西:Paint.Style,Paint.Cap,Paint.Join等,这些都是Paint中的一些枚举值,相关 方法我们可以通过设置这些枚举值来设置特定效果比如:Style:画笔样式,Join图形结合方式等, 本节我们走进Paint的源码,我们来一一介绍这些枚举值,另外我们也顺道讲下这个ShadowLayer 设置带阴影效果的Paint!打开Paint类的源码,我们可以看到下述这些枚举值:
Paint枚举、常量值、阴影效果、字体
文章图片
1.get枚举用法: 不知大家对枚举陌生还是熟悉,这里把贴下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);

1.Paint.Style 作用:画笔的样式 可选值:
  • FILL:填充内部(默认)
  • STROKE:只描边
  • FILL_AND_STROKE:填充内部与描边
方法调用:setStyle(Paint.Style style) 对应效果:
Paint枚举、常量值、阴影效果、字体
文章图片
2.Paint.Cap 作用:笔触风格,设置画笔始末端的图形(画笔开始画的第一点与最后一点) 可选值:
  • BUTT:笔触是长方形且不超过路径(默认)
  • ROUND:笔触是圆形
  • SQUARE:笔触是正方形
方法调用:setStrokeCap(Paint.Cap cap)
对应效果:平时我们直接画的是第一个,其他两个会比普通的多一点而外的区域,第二个 是圆角,第三个是矩形!
Paint枚举、常量值、阴影效果、字体
文章图片
3.Paint.Join 作用:设置接合处的状态,比如你的线是由多条小线拼接而成,拼接处的形状 可选值:
  • MITER:接合处为锐角(默认)
  • ROUND:接合处为圆弧
  • BEVEL:接合处为直线
方法调用:setStrokeJoin(Paint.Join join)
另外还有个setStrokeMiter(float miter)是设置笔画的倾斜度,miter > = 0; 如:小时候用的铅笔,削的时候斜与垂直削出来的笔尖效果是不一样的。 主要是用来设置笔触的连接处的样式。可以和setStrokeJoin()来比较比较。
4.Paint.Align 作用:设置绘制文本的对其方式,就是相对于绘制文字的[x,y]起始坐标 可选值:
  • LEFT:在起始坐标的左边绘制文本
  • RIGHT:在起始坐标的右边绘制文本
  • CENTER:以其实坐标为中心绘制文本
【Paint枚举、常量值、阴影效果、字体】方法调用:setTextAlign(Paint.Align align)
对应效果:另外可调用setTextSize()设置绘制文本的大小~
Paint枚举、常量值、阴影效果、字体
文章图片
5.Paint.FontMetrics和Paint.FontMetricsInt 字体属性及测量,另外这两个方法是一样的,只是后者取到的值是一个整形, 这里我们选FontMetricsInt来给大家讲解下,有下面这五个常量值,这里参考的基准点是: 下划线的位置(Baseline)
  • top:最高字符到baseline的距离,即ascent的最大值
  • ascent:字符最高处的距离到baseline的值
  • descent:下划线到字符最低处的距离
  • bottom:下划线到最低字符的距离,即descent的最大值
  • leading:上一行字符的descent到下一行的ascent之间的距离
我们看几个图帮助理解下:
Paint枚举、常量值、阴影效果、字体
文章图片
Paint枚举、常量值、阴影效果、字体
文章图片
Paint枚举、常量值、阴影效果、字体
文章图片
然后我们随意画一串字母,把这些值打印出来: canvas.drawText("abcdefghijklnmopqrstuvwxyz", 400, 400, mPaint1); Log.e("HEHE", mPaint1.getFontMetricsInt().toString()); 运行下,我们可以看到,打印出来的Log如下:
Paint枚举、常量值、阴影效果、字体
文章图片
看完思考思考,画一画,应该不难理解!这里我们知道下就好,如果你想更 深入研究,可以参考下这篇:Android字符串进阶之三:字体属性及测量(FontMetrics)
6.ShadowLayer设置阴影效果 我们在TextView那一节就教过大家为TextView的文本设置阴影效果,而Paint其实也提供了设置 阴影效果的API:setShadowLayer(float radius, float dx, float dy, int shadowColor)
参数:radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,shadowColor为阴影的颜色 我们可以写个非常简单的句子验证下:
mPaint1.setShadowLayer(5,0,0,Color.BLACK); canvas.drawText("毕竟基神~", 400, 400, mPaint1); //绘制文字

效果如下:
Paint枚举、常量值、阴影效果、字体
文章图片
另外我们还可以调用clearShadowLayer()来清除这个阴影层~
7.字体Typeface(字型)
  • 常用的字体类型名称还有:
    • Typeface.DEFAULT //常规字体类型
    • Typeface.DEFAULT_BOLD //黑体字体类型
    • Typeface.MONOSPACE //等宽字体类型
    • Typeface.SANS_SERIF //sans serif字体类型
  • 常用的字体风格名称还有:
    • Typeface.BOLD //粗体
    • Typeface.BOLD_ITALIC //粗斜体
    • Typeface.ITALIC //斜体
    • Typeface.NORMAL //常规
1.在xml中设置。
使用android:typeFace来设置:Android:typeface=”sans”
2.在Java程序中:
eg1:
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD); p.setTypeface( font );

eg2:
String familyName = “宋体”; Typeface font = Typeface.create(familyName,Typeface.BOLD); p.setTypeface(font);

使用外部字体
1.首先吧要使用的字体文件拷贝到assets下的fonts目录下。
2.代码如下:
private void mySetTypeFace() { // TODO Auto-generated method stub //从assert中获取有资源,获得app的assert,采用getAserts(),通过给出在assert/下面的相对路径。在实际使用中,字体库可能存在于SD卡上,可以采用createFromFile()来替代createFromAsset。 Typeface face = Typeface.createFromAsset(getAssets(), "fonts/HanYi.ttf"); //title是之间定义的控件 title.setTypeface(face);

    推荐阅读