3

文字大小比较

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

在图像中,您可以看到标签上的 40 码和涂漆时的区别。我需要做什么才能使它们的大小相同?

4

2 回答 2

8

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

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

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

var scale = canvasWidth / viewWidth;
canvas.Scale(scale);

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

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

var paint = new SKPaint {
    TextSize = 40 * scale
};

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

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

这将比较 Xamarin.Forms、SkiaSharp 和本机标签。(它们都应该是完全相同的大小)

于 2017-03-10T19:30:33.850 回答
0

我认为问题在于 Xamarin.Forms 处理字体大小的方式。例如,在 Android 上,您可以以像素 (px)、与比例无关的像素 (sp)、英寸 (in)、毫米和与密度无关的像素 (dp/dip) 为单位定义字体大小。

我不记得 Xamarin.Forms 是如何处理大小(px、sp 或 dp)的,但您在此处看到的差异正是因为如此。您可以做的是创建一个效果来更改本机控件上的字体大小处理并尝试匹配 SkiaSharp 提供的大小。

于 2017-03-10T11:41:19.920 回答