Xamarin 表单上的 SkiaSharp 文本大小

Mar*_*nnw 3 xamarin xamarin.forms skiasharp

文字大小比较

SKPaint 对象上的 TextSize 属性与“标准”Xamarin Forms FontSize 有何关联?

在图像中,您可以看到标签上的尺寸 40 与绘制的尺寸之间的差异。我需要做什么才能使它们大小相同?

Mat*_*hew 8

正如@hankide 所提到的,这与本机操作系统对 UI 元素进行缩放的事实有关,因此应用程序在不同设备上“看起来大小相同”。

这对于按钮以及操作系统正在绘制它们时的所有内容都非常有用。所以如果按钮更大,操作系统只会放大文本。但是,使用 SkiaSharp,我们不知道您在绘制什么,因此我们无法进行任何缩放。如果我们要缩放,图像在高分辨率屏幕上会变得模糊或像素化。

使所有内容都具有相同大小的一种方法是在绘制任何内容之前进行全局缩放:

var scale = canvasWidth / viewWidth;
canvas.Scale(scale);
Run Code Online (Sandbox Code Playgroud)

这通常已经足够了,但有时您真的想在高分辨率屏幕上以不同的方式绘制项目。一个例子是平铺的背景。而不是在更大的画布上拉伸图像,您可能只想平铺它 - 保留像素。

在这个问题的情况下,您可以在绘制之前缩放整个画布,也可以只缩放文本:

var paint = new SKPaint {
    TextSize = 40 * scale
};
Run Code Online (Sandbox Code Playgroud)

这样,文本大小增加了,但绘图的其余部分在更大的画布上。

我在 GitHub 上有一个例子:https : //github.com/mattleibow/SkiaSharpXamarinFormsDemo

这比较了 Xamarin.Forms、SkiaSharp 和 Native 标签。(它们的大小应该完全相同)