API 参考 / 打击特效样式(render 包)
TextStyle
用途:文本样式,供 RenderCanvas#drawText 与 RenderCanvas#measureText 使用。宿主用随包的位图/矢量字形渲染,size() 与对齐方式在不同字体路径下表现略有差异(见下)。
方法速览
| 方法 | 用途 |
|---|---|
fontType() | 字体类型:NORMAL / BOLD / PROPORTIONAL |
size() | 字号(像素) |
color() | 文本颜色 |
alignment() | 对齐方式,决定 drawText 的 x 语义 |
of(double, Color) | 快捷构造:NORMAL + 左对齐 |
of(FontType, double, Color, TextAlignment) | 完整构造 |
完整签名
java
public interface TextStyle {
FontType fontType();
double size();
Color color();
TextAlignment alignment();
enum FontType {
NORMAL,
BOLD,
PROPORTIONAL
}
enum TextAlignment {
LEFT,
CENTER,
RIGHT
}
static TextStyle of(double size, Color color);
static TextStyle of(FontType fontType, double size, Color color, TextAlignment alignment);
}fontType()
签名:
java
FontType fontType();行为:字体类型,null 按 NORMAL 处理。
NORMAL:等宽字形,始终按宿主固定基准字号(16px)绘制,size()对它无效;BOLD:比例字形 + 加粗,按size()取整设置字号;PROPORTIONAL:比例字形,同样按size()取整设置字号。
size()
签名:
java
double size();行为:建议字号(像素)。仅 BOLD / PROPORTIONAL 路径生效(取整后至少 1px);NORMAL 路径固定 16px。为了像素稳定,宿主在一次 drawText 之后会把字号复位,不会污染后续绘制。
color()
签名:
java
Color color();行为:文本颜色(java.awt.Color,含 alpha)。为 null 时退回当前绘制色(RenderCanvas#setColor 设置的颜色)。
alignment()
签名:
java
TextAlignment alignment();行为:决定 drawText(text, x, y, style) 中 x 的含义:LEFT 为文本左缘、CENTER 为水平中心、RIGHT 为右缘。宿主按 measureText 同口径的宽度做偏移,因此对齐结果与测量值一致。y 始终是文本基线附近的绘制起点,不随对齐方式变化。null 按 LEFT 处理。
of(double size, Color color)
签名:
java
static TextStyle of(double size, Color color);行为:等价于 of(FontType.NORMAL, size, color, TextAlignment.LEFT)。因为 NORMAL 固定 16px,该方法实际效果与 size 无关;想要按字号放大文字请用 BOLD 或 PROPORTIONAL。
of(FontType fontType, double size, Color color, TextAlignment alignment)
签名:
java
static TextStyle of(FontType fontType, double size, Color color, TextAlignment alignment);行为:构造完整样式,返回不可变实例,可反复复用。
示例:居中绘制标题与按字号放大
java
// 小字:等宽字形固定 16px,默认左对齐
TextStyle small = TextStyle.of(16, java.awt.Color.WHITE);
canvas.drawText("COMBO 128", x, y, small);
// 标题:比例字形 28px、水平居中(对齐方式决定 x 是中心点)
TextStyle title = TextStyle.of(TextStyle.FontType.PROPORTIONAL, 28,
java.awt.Color.WHITE, TextStyle.TextAlignment.CENTER);
canvas.drawText("RESULT", centerX, y, title);
// 先量再排版:把副标题放在标题上方
TextMetrics m = canvas.measureText("RESULT", title);
canvas.drawText("成绩结算", centerX, y - m.height(), small);