ScaleFactor für verschiedene Auflösungen

  • Antworten:3
Georg
  • Forum-Beiträge: 12

31.03.2014, 21:00:31 via Website

Hallo,
Ich zeichne mit Canvas Linien für eine 480*800 Pixel auflösung.
Damit das auch für andere Auflösungen funktioniert benutze ich folgendes:

1DisplayMetrics metrics = new DisplayMetrics();
2getWindowManager().getDefaultDisplay().getMetrics(metrics);
3float screenDensity = metrics.density;
4scale = getScale(screenDensity);
5
6
7float getScale(float value)
8{
9 //480 x 800
10 if(value == 1.5)
11 {
12 value -= (float)0.5;
13 return value;
14 }
15
16 //1920 x 1080
17 if(value == 3)
18 {
19 return (value-(float)0.75);
20 }
21 return -1;
22}

Durch rumprobieren hab ich jetzt rausgefunden das ich z.B. für mein lg g2(1920*1080) noch - 0.75 rechnen muss damit alles richtig angezeigt wird.
Jetzt ist meine Frage wie ich das ganze dynamisch für alle Auflösungen ab 480*800 Pixel lösen kann ?

Antworten
impjor
  • Forum-Beiträge: 1.793

31.03.2014, 21:32:44 via App

Bist du sicher, dass die density entscheidend ist? Sonst wird dein Canvas immer z.B. 3cm groß sein, egal ob 3"-Gerät oder Tablet.
Sinnvoller wäre doch eher eine zur Bildschirmgröße relative Breite und Höhe.
Also so, dass das Canvas immer die Hälfte des Bildschirms einnimt, oder ein viertel oder...
Kommt natürlich auch ein bisschen auf den Anwendungsfall an.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Georg
  • Forum-Beiträge: 12

01.04.2014, 17:40:22 via Website

Danke für eure Antworten!
Ich habe meine Frage wohl etwas falsch gestellt.

Ich hab meine App ursprünglich für ein Gerät mit high density(240dpi) geschrieben.
Also will ich das bei high density mein ScaleFactor 1 ist:
d.H. rechne ich: -0.5
1case 240: //high
2 return (metrics.scaledDensity-(float)0.5);

Und bei einer extra extra high density(480dpi) hab ich durch probieren rausgefunden das ich noch -0.75 rechnen muss das er passt!
1case 480: //extra extra high
2 return (metrics.scaledDensity-(float)0.75);

Da ich "leider" nur die beiden Handys besitze weiß ich nicht wie viel ich z.B. für extra high density(320dpi) noch abziehen muss damit das passt! :/


Man sollte ja meinen wenn bei 240dpi mein Factor 1 ist --> 480 dpi der Factor dann 2 sein sollte!
Er ist aber 2.25 und ich verstehe nicht warum!?



1float getScale()
2 {
3 DisplayMetrics metrics = new DisplayMetrics();
4 getWindowManager().getDefaultDisplay().getMetrics(metrics);
5
6 int density = metrics.densityDpi;
7 switch(density)
8 {
9 case 120: //LOW
10 return -1;
11
12 case 160: //Medium
13 return -1;
14
15 case 240: //high
16 return (metrics.scaledDensity-(float)0.5);
17
18 case 320: //extra high
19 return -1;
20
21 case 480: //extra extra high
22 return (metrics.scaledDensity-(float)0.75);
23
24 case 640: //extra extra extra high
25 return -1;
26 }

— geändert am 01.04.2014, 17:47:43

Antworten