Canvas提供了绘制文字的API,开发者在使用fillText绘制文字时会遇到以下场景:
Canvas提供了fillText和strokeText两个API分别用于绘制填充类文本和绘制描边类文本,另外提供了font属性来设置字体样式,其语法如下:ctx.font = 'font-style font-weight font-size font-family'。具体示例可以参照官网font属性。
@Entry
@Component
struct CanvasCustomFont {
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
aboutToAppear(): void {
this.getUIContext().getFont().registerFont({
familyName: 'customFont',
familySrc: $rawfile('customFont.ttf') // rawfile目录下自定义字体,开发者可以自行替换
});
}
build() {
Column() {
Button('Draw Custom Font').width(200).onClick(() => {
this.context.font = '150px customFont';
this.context.fillText('Hello World!', 60, 200);
});
Canvas(this.context)
.width('100%')
.height('100%')
.onReady(() => {
this.context.font = '150px sans-serif';
this.context.fillText('Hello World!', 60, 100);
});
}
.width('100%')
.height('100%')
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]);
}
} 效果预览:

Canvas提供了createLinearGradient、createRadialGradient和createConicGradient接口用于创建渐变色,创建完成后可以使用fillStyle或者strokeStyle来指定绘制的填充色和线条颜色。
@Entry
@Component
struct CanvasGradFont {
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
build() {
Column() {
Canvas(this.context)
.width('100%')
.height('100%')
.onReady(() => {
this.context.font = '150px sans-serif';
// 创建一个线性渐变
let grad = this.context.createLinearGradient(50, 0, 300, 100);
grad.addColorStop(0.0, '#f88b57');
grad.addColorStop(0.4, '#aee4a0');
grad.addColorStop(0.7, '#c4d1ec');
grad.addColorStop(0.9, '#c08dcc');
// 后续fill相关绘制都会使用该线性渐变
this.context.fillStyle = grad;
this.context.fillText('Hello World!', 60, 100);
// 创建一个径向渐变
let radialGrad = this.context.createRadialGradient(200, 200, 50, 200, 200, 200);
radialGrad.addColorStop(0.0, 'rgb(39,135,217)');
radialGrad.addColorStop(0.5, 'rgb(255,238,240)');
radialGrad.addColorStop(1.0, 'rgb(112,112,112)');
// 后续stroke相关绘制都会使用该径向渐变
this.context.strokeStyle = radialGrad;
this.context.strokeText('Hello World!', 60, 200);
});
}
.width('100%')
.height('100%')
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]);
}
} 效果预览:

通过设置shadowBlur和shadowColor属性可以增加阴影设置效果,以此来实现文字阴影效果。
@Entry
@Component
struct CanvasShadowFont {
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
build() {
Column() {
Canvas(this.context)
.width('100%')
.height('100%')
.onReady(() => {
this.context.font = '150px sans-serif';
this.context.fillText('Hello World!', 60, 100);
// 设置阴影样式
this.context.shadowBlur = 30;
this.context.shadowColor = 'rgb(0,0,0)';
this.context.fillText('Hello World!', 60, 200);
});
}
.width('100%')
.height('100%')
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]);
}
} 效果预览:

Canvas提供了绘制文字的API,其文字样式主要受到font、fillStyle和strokeStyle属性影响: