2017-03-10 86 views
2

Text Size ComparisonSkiaSharp文字大小窗體

怎樣的SKPaint對象的TEXTSIZE財產涉及到「標準」 Xamarin窗體字號?

在圖像中,您可以看到標籤上的大小40與塗色之間的差異。我需要做些什麼來使它們尺寸相同?

回答

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和本地標籤。 (他們應該都是完全一樣的大小)

0

我認爲問題在於Xamarin.Forms處理字體大小的方式。例如,在Android上,您可以以像素(px),縮放無關像素(sp),英寸(in),毫米和密度無關像素(dp/dip)來定義字體大小。

我不記得Xamarin.Forms如何處理大小(px,sp或dp),但您在此處看到的差異是因爲這一點。你可以做的是創建一個Effect來改變原生控件的字體大小處理,並嘗試匹配SkiaSharp提供的大小。

+0

我會看看發生了什麼......我認爲Xamarin.Forms值也可能乘以屏幕密度...您可能能夠得到帶'paint.TextSize = 40 *密度'。 – Matthew