var scale = canvasWidth / viewWidth;
canvas.Scale(scale);
这通常已经足够好了,但是有时候你真的希望在高分辨率屏幕上以不同的方式绘制物品。一个例子就是平铺背景。你可能不想在更大的画布上拉伸图像,而只是想将其平铺 - 保留像素。
对于这个问题,你可以在绘制之前缩放整个画布,也可以只缩放文本:
var paint = new SKPaint {
TextSize = 40 * scale
};
我认为问题在于Xamarin.Forms处理字体大小的方式。例如,在Android上,您可以以像素(px)、独立比例像素(sp)、英寸(in)、毫米和密度无关像素(dp/dip)定义字体大小。
我记不清Xamarin.Forms如何处理大小(px、sp或dp),但您看到的差异就是因为这个原因。您可以创建一个Effect来更改本地控件上的字体大小处理,并尝试匹配SkiaSharp提供的大小。
paint.TextSize = 40 * density
。 - Matthew