【C# MAUI Android】绘制文字并设置字体

前言

在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);  
}
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值