前言
在MAUI中设置字体通常方法为将字体文件放入Resourse下的Fonts内
正常情况下xaml中可以直接通过下方代码实现
<Label
Text="假如文件名为:fs.ttf"
FontFamily="fs"/>
但在使用SKCanvas绘制文字时无法直接使用该字体导致中文乱码
绘制方法
1.将字体文件放入Fonts文件夹内
2.设置绘制格式
// 使用await关键字异步打开应用包中的文件“fs.ttf”。这里假设“fs”是你的字体文件的名称,
// 并且该文件已经包含在你的应用包中。OpenAppPackageFileAsync方法返回一个Stream,
// 该Stream可以用来读取文件内容。
using var data = await FileSystem.OpenAppPackageFileAsync("fs.ttf");
// 创建一个SKPaint对象,用于定义文本的绘制方式。
SKPaint textPaint = new SKPaint
{
// 设置文本颜色为黑色。
Color = SKColors.Black,
// 设置文本大小为25。这个大小是相对于画布的,具体效果取决于画布的缩放级别。
TextSize = 25,
// 设置是否启用抗锯齿。抗锯齿可以使文本边缘看起来更平滑,减少锯齿状的效果。
IsAntialias = true,
// 设置文本对齐方式为居中。这意味着绘制的文本将会相对于其指定的位置居中对齐。
TextAlign = SKTextAlign.Center,
// 使用前面打开的字体文件流来创建一个SKTypeface对象,并将其设置为SKPaint的Typeface属性。
// 这意味着使用“fs.ttf”字体文件来绘制文本。
Typeface = SKTypeface.FromStream(data)
};
3.设置绘制方法
// 定义一个私有方法,用于在SKCanvas上绘制文本。
// 参数包括:
// SKCanvas canvas:要在其上绘制文本的画布。
// float x, float y:文本绘制的中心点坐标。
// string Name:要绘制的文本内容。
// SKPaint sKPaint:包含文本绘制样式的SKPaint对象。
private void DrawText(SKCanvas canvas, float x, float y, string Name, SKPaint sKPaint)
{
// 创建一个SKRect对象,用于存储文本的边界框。
SKRect textBounds = new SKRect();
// 使用SKPaint对象测量文本的边界,并将结果存储在textBounds中。
sKPaint.MeasureText(Name, ref textBounds);
// 计算文本的左上角坐标,以便将文本居中绘制在指定的(x, y)位置。
// textX是x坐标减去文本宽度的一半,textY是y坐标减去文本高度的一半。
float textX = x - textBounds.MidX;
float textY = y - textBounds.MidY;
// 在画布上绘制文本,使用计算出的左上角坐标和SKPaint对象。
canvas.DrawText(Name, textX, textY, sKPaint);
}