SKPaint对象上的TextSize属性如何与'标准'Xamarin Forms FontSize相关?
在图像中,您可以看到标签上的尺寸40与涂漆之间的差异。我需要做些什么来使它们具有相同的尺寸?
答案 0 :(得分:4)
正如@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和Native标签。 (它们应该都是完全相同的大小)
答案 1 :(得分:0)
我认为问题在于Xamarin.Forms处理字体大小的方式。例如,在Android上,您可以定义字体大小(以像素为单位)(px),与比例无关的像素(sp),英寸(in),毫米和与密度无关的像素(dp / dip)。
我不记得Xamarin.Forms如何处理大小(px,sp或dp),但你在这里看到的差异就是因为这个。你可以做的是创建一个效果,改变原生控件上的字体大小处理,并尝试匹配SkiaSharp提供的大小。