您的位置:首页 >8.3.14 Paint几个枚举/常量值以及ShadowLayer阴影效果
发布于2026-08-12 阅读(0)
扫一扫,手机访问
在 Android 基础入门教程——8.3.1 三个绘图工具类详解 Paint 的方法参数那一节里,其实已经接触过几个很关键的东西:Paint.Style、Paint.Cap、Paint.Join 等。它们本质上都是 Paint 里的枚举值,很多相关效果,正是通过设置这些枚举值来完成的。比如,Style 决定画笔样式,Join 决定图形的结合方式,等等。接下来,就顺着这个思路进一步往里看,直接走进 Paint 的源码,把这些枚举值逐个讲清楚;同时,也会顺带说一说 ShadowLayer,看看它是怎么给 Paint 设置阴影效果的。打开 Paint 类源码后,能看到的就是下面这些枚举值:
好了,不BB,开始本节内容!
不知大家对枚举陌生还是熟悉,这里把贴下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);
下面我们一一来解释这些枚举值的作用!
作用:画笔的样式 可选值:
- FILL:填充内部(默认)
- STROKE:只描边
- FILL_AND_STROKE:填充内部与描边
方法调用:setStyle(Paint.Style style) 对应效果:
作用:笔触风格,设置画笔始末端的图形(画笔开始画的第一点与最后一点) 可选值:
- BUTT:笔触是长方形且不超过路径(默认)
- ROUND:笔触是圆形
- SQUARE:笔触是正方形
方法调用:setStrokeCap(Paint.Cap cap)
对应效果:平时我们直接画的是第一个,其他两个会比普通的多一点而外的区域,第二个 是圆角,第三个是矩形!
作用:设置接合处的状态,比如你的线是由多条小线拼接而成,拼接处的形状 可选值:
- MITER:接合处为锐角(默认)
- ROUND:接合处为圆弧
- BEVEL:接合处为直线
方法调用:setStrokeJoin(Paint.Join join)
一般圆弧用得多,可参见之前的擦掉美女衣服Demo的显示
另外还有个setStrokeMiter(float miter)是设置笔画的倾斜度,miter > = 0; 如:小时候用的铅笔,削的时候斜与垂直削出来的笔尖效果是不一样的。 主要是用来设置笔触的连接处的样式。可以和setStrokeJoin()来比较比较。
作用:设置绘制文本的对其方式,就是相对于绘制文字的[x,y]起始坐标 可选值:
- LEFT:在起始坐标的左边绘制文本
- RIGHT:在起始坐标的右边绘制文本
- CENTER:以其实坐标为中心绘制文本
方法调用:setTextAlign(Paint.Align align)
对应效果:另外可调用setTextSize()设置绘制文本的大小~
字体属性及测量,另外这两个方法是一样的,只是后者取到的值是一个整形, 这里我们选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)
我们在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); //绘制文字
效果如下:

另外我们还可以调用clearShadowLayer()来清除这个阴影层~
这一节主要把 Paint 里几个常见的枚举值、静态常量,以及通过 ShadowLayer 给画笔加阴影、调用 clearShadowLayer() 清除阴影层这几件事顺了一遍。说到底,这部分内容并不算复杂,源码和文档里其实都写得很清楚。真遇到拿不准的地方,最有效的办法还是自己动手写个 Demo 跑一遍,很多原本看着抽象的点,试过之后反而一下就明白了。这里先讲到这儿。
另外,可能你不知道在哪看到了我的QQ,但是可以的话尽量加群好么,平时也要上班, 一个两个还好,一堆人,有心无力,有时帮忙解决问题,结果一天什么都没做,望各位体谅, 有问题加请加小猪群,群管理都是非常热心的:421858269~
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9