在Android基础入门教程——8.3.1 三个绘图工具类详解Paint的方法参数那里就接触到了这样几个东西Paint.Style,Paint.Cap,Paint.Join等,这些都是Paint中的枚举值,相关方法可以通过设置这些枚举值来设置特定效果比如Style画笔样式,Join图形结合方式等,本节走进Paint的源码,来一一介绍这些枚举值,另外也顺道讲下这个ShadowLayer设置带阴影效果的Paint!打开Paint类的源码,可以看到下述这些枚举值
不BB,开始本节内容!
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)对应效果
2.Paint.Cap
作用笔触风格,设置画笔始末端的图形(画笔开始画的第一点与最后一点)可选值
- BUTT笔触是长方形且不超过路径(默认)
- ROUND笔触是圆形
- SQUARE笔触是正方形
方法调用setStrokeCap(Paint.Cap cap)
对应效果平时直接画的是第个,其他两个会比普通的多一点而外的区域,第二个是圆角,第三个是矩形!
3.Paint.Join
作用设置接合处的状态,比如 的线是由多条小线拼接而成,拼接处的形状可选值
- MITER接合处为锐角(默认)
- ROUND接合处为圆弧
- BEVEL接合处为直线
方法调用setStrokeJoin(Paint.Join join)
圆弧用得多,可参见之前的擦掉美女衣服Demo的显示
另外还有个setStrokeMiter(float miter)是设置笔画的倾斜度,miter > = 0;如小时候用的铅笔,削的时候斜与垂直削出来的笔尖效果是不一样的 主要是用来设置笔触的连接处的样式 可以和setStrokeJoin()来比较比较
4.Paint.Align
作用设置绘制文本的对其方式,就是相对于绘制文字的[x,y]起始坐标可选值
- LEFT在起始坐标的左边绘制文本
- RIGHT在起始坐标的右边绘制文本
- CENTER以其实坐标为中心绘制文本
方法调用setTextAlign(Paint.Align align)
对应效果另外可调用setTextSize()设置绘制文本的大小~
5.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字符串进阶之三字体属性及测量(FontMetrics)
6.ShadowLayer设置阴影效果
在TextView那一节就教过 为TextView的文本设置阴影效果,而Paint其实也提供了设置阴影效果的APIsetShadowLayer(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); //绘制文字
效果如下
另外还可以调用clearShadowLayer()来清除这个阴影层~
本节小结
讲解了下Paint里面的几个枚举值以及静态常量,以及ShadowLayer为画笔设置阴影效果或调用clearShadowLayer()清除阴影层~其实这些东西都可以自己去看源码以及文档,有疑惑就动手写个Demo,很多东西就自然一清二楚的了,
另外,可能 不知道在哪看到了的QQ,但是可以的话尽量加群好么,平时也要上班,个两个还好,一堆人,有心无力,有时帮忙解决问题,结果一天什么都没做,望 体谅,有问题加请加小猪群,群管理都是非常热心的421858269~
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题