German Skalierung

webmaas

Member
N'Abend!

Ich arbeite gerade an einem Projekt, das im Fullscreen auf Androidgeräten laufen soll. Damit die Applikation auf Geräten mit verschiedenen Auflösungen gleich aussieht, nutze ich einen Scale-Factor. Wird beispielsweise eine rechteckige Fläche auf einem 480x800-Display dargestellt, wobei von ihr ein Viertel des Displays bedeckt wird, soll dieses Rechteck auch bei einem anderen Gerät mit einer Auflösung von beispielsweise 1280x800 ein Viertel des Displays bedecken.

Die Idee war nun, dass ich einen X-Wert und einen Y-Wert ermittle, mit dem ich die Breite des Rechtecks multipliziere. Dazu verwende ich zur Zeit dieses Stückchen hier:

B4X:
Dim LayoutVals As LayoutValues
Dim stdVariantX, stdVariantY As Int
Dim scaleX, scaleY As Double 

LayoutVals = GetDeviceLayoutValues
stdVariantX = 1280
stdVariantY = 600
scaleX = LayoutVals.Width / stdVariantX
scaleY = LayoutVals.Height / stdVariantY

' ...

' Panel0 ersteckt sich ueber den gesamten Bildschirm 
Panel0.AddView(lblViertel, 0, 0, (1280 / 4) * scaleX, (600 / 4) * scaleY)

' Ein grafisches Element, das in der und fuer die Standardauflösung erstellt wurde (z.B. 100x200px):
Panel0.AddView(bild, 0, 0, 100 * scaleX, 200 * scaleY)

Das Layout wurde in Photoshop oder ähnlichem in diesem Beispiel also in der Auflösung 1280x600 erstellt und die einzelnen grafischen Elemente wurden passend zu dieser Auflösung abgespeichert. Würde man sich das Programm nun beispielsweise mit einer Auflösung von 1920 Pixeln in der Breite ansehen, wäre scaleX = 1920 / 1280 = 1.5, das Bild würde also statt mit 100px über eine Breite von 150px dargestellt werden.

Ich habe diese Methode nun in verschiedenen Auflösungen auf verschiedenen AVDs getestet und erhalte stets die selbe Größenverteilung der Elemente auf dem Bildschirm. Doch lese ich im Internet, das man die physikalischen Pixel nicht verwenden sollte, um die Größen der Elemente zu bestimmen. Ich verstehe nur nicht, weshalb man das nicht sollte.

Vergesse ich irgendetwas? Gibt es Gefahren, an die ich hier nicht denke?

Es soll hierbei nicht darum gehen, dass die Grafiken evtl. unproportional verzerrt werden.

Ich würde mich sehr über Hinweise oder alternative Vorschläge freuen!
 

Jost aus Soest

Active Member
Licensed User
Longtime User
M. E. kann man durchaus absolute Koordinaten verwenden, wenn man sowieso alles berechnet...
Allerdings kann man sich fast immer diese Berechnungen ersparen, indem man die Prozentnotation verwendet, etwa 20%x oder 100%y.
 

webmaas

Member
M. E. kann man durchaus absolute Koordinaten verwenden, wenn man sowieso alles berechnet...
Allerdings kann man sich fast immer diese Berechnungen ersparen, indem man die Prozentnotation verwendet, etwa 20%x oder 100%y.

Hallo Jost,

danke für deine schnelle Antwort! Die Prozentnotation hatte ich erstmal verworfen, weil es schwer ist, die Größen der vorliegenden grafiken Pixelgenau einzugeben, besonders wohl auch bei Schriftgrößen. Danke aber für deinen Vorschlag.
 
Top