2017-03-10 7 views
2

Text Size ComparisonSkiaSharp Textgröße auf Xamarin Forms

Wie funktioniert die Textsize-Eigenschaft auf einem SKPaint Objekt beziehen sich auf die 'Standard' Xamarin Forms Fontsize?

Im Bild sehen Sie den Unterschied zwischen Größe 40 auf einem Etikett und wie gemalt. Was müsste ich tun, um sie gleich groß zu machen?

Antwort

4

Wie @hankide erwähnt, hat es mit der Tatsache zu tun, dass das native Betriebssystem Skalierung für UI-Elemente hat, so dass die App auf verschiedenen Geräten "die gleiche Größe" aussieht.

Dies ist ideal für Schaltflächen und alles, wie das OS sie zeichnet. Wenn der Button also größer ist, skaliert das Betriebssystem den Text einfach. Mit SkiaSharp haben wir jedoch keine Ahnung, was Sie zeichnen, so dass wir keine Skalierung vornehmen können. Wenn wir skalieren würden, würde das Bild auf den hochauflösenden Bildschirmen verschwommen oder verpixelt werden.

Eine Möglichkeit, alles, was die gleiche Größe zu erhalten, ist eine globale Ebene zu tun, bevor irgendetwas Zeichnung:

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

Und das ist oft gut genug, aber manchmal will man wirklich Elemente unterschiedlich auf einem hochauflösenden Bildschirm zeichnen . Ein Beispiel wäre ein gekachelter Hintergrund. Anstatt das Bild auf einer größeren Leinwand zu strecken, möchten Sie es vielleicht nur kacheln - unter Beibehaltung der Pixel.

Bei dieser Frage können Sie entweder die gesamte Leinwand skalieren vor dem Ziehen, oder Sie können den Text einfach skalieren:

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

Auf diese Weise wird die Textgröße erhöht, aber der Rest der Zeichnung ist auf einer größeren Leinwand.

Ich habe ein Beispiel auf GitHub: https://github.com/mattleibow/SkiaSharpXamarinFormsDemo

Dies vergleicht Xamarin.Forms, SkiaSharp und Native Etiketten. (Sie sollten alle genau die gleiche Größe haben)

0

Ich denke, dass das Problem in der Art ist, wie Xamarin.Forms Schriftgrößen behandelt. Unter Android können Sie beispielsweise die Schriftgröße in Pixel (px), maßstabsunabhängige Pixel (sp), Zoll (in), Millimeter und dichteunabhängige Pixel (dp/dip) definieren.

Ich kann mich nicht erinnern, wie Xamarin.Forms die Größen (px, sp oder dp) behandelt, aber der Unterschied, den Sie hier sehen, ist deswegen. Sie können einen Effekt erstellen, der die Schriftgrößenbehandlung für das native Steuerelement ändert und versucht, die von SkiaSharp bereitgestellte Größe zu erreichen.

+0

Ich werde schauen und sehen, was passiert ... Ich denke, dass der Xamarin.Forms Wert auch durch Bildschirmdichte multipliziert werden könnte ... Sie könnten in der Lage sein zu bekommen weg mit 'paint.TextSize = 40 * dichte'. – Matthew