A
Astrachan
Neues Mitglied
- 3
Hallo Leute
Vielleicht könnt ihr mir bezüglich eines nervigen Problems helfen. Bei Google habe ich zumindest keine zufriedenstellende Antwort gefunden.
Also:
Ich soll aus vielen Grafiken ein komplettes Bild zusammensetzen. Ihr könnt euch das wie ein Ausrüstungsmenü aus einem Rollenspiel vorstellen. Alle Grafiken sind in 2D und bis auf ein paar Ausnahmen statisch (Rotieren und Skalieren kommt vor).
Das Ding ist jetzt, dass dieses komplette Bild später automatisch auf quasi allen Android-Geräten gut aussehen soll. Es soll die Auflösung und die Pixeldichte berücksichtigt werden und dafür liegen alle Grafiken in zwei verschiedenen Auflösungen vor.
Selbstverständlich kann man nicht mit festen Pixeln arbeiten. Dafür wird ja die Einheit "dp" empfohlen. Ich möchte nun wissen, wie professionelle Entwickler sowas handhaben. Die density-indipendent-pixel als Einheit lässt ja nur in XML-Layouts verwenden. Allerdings habe ich nach dem LunarLander-Beispiel gearbeitet und zeichne auf einem Canvas im SurfaceView. Ich erzeuge das Drawable-Objekt und platziere die Grafik im Code.
Nun kann man natürlich Pixel in dp umrechnen, aber ist "dp" überhaupt die Lösung, wenn ich eine Grafik(Position und Größe) auf allen Geräten korrekt darstellen will?
Woher soll ich wissen, wie weit ich mit dp maximal gehen kann. Die Doku sagt ja:
Also muss ich dennoch die Göße bzw. Auflösung eines Geräts herausfiltern.
Später will ich den Code universal einsetzbar machen. Wie gebe ich am besten die Position und Größe einer Grafik an, in Prozent? Ich weiß ja vorher nichts über Größe, Auflösung und Pixeldichte.
Es kann aber auch sein, dass ich völlig auf dem Schlauch stehe und irgendwas Fundamentales übersehe. Über jede Hilfe bin ich sehr froh.
Wen es interessiert, hier der Code, wie ich ein Bild auf allen Geräten darstelle, das den ganzen Schirm ausfüllt:
Vielleicht könnt ihr mir bezüglich eines nervigen Problems helfen. Bei Google habe ich zumindest keine zufriedenstellende Antwort gefunden.
Also:
Ich soll aus vielen Grafiken ein komplettes Bild zusammensetzen. Ihr könnt euch das wie ein Ausrüstungsmenü aus einem Rollenspiel vorstellen. Alle Grafiken sind in 2D und bis auf ein paar Ausnahmen statisch (Rotieren und Skalieren kommt vor).
Das Ding ist jetzt, dass dieses komplette Bild später automatisch auf quasi allen Android-Geräten gut aussehen soll. Es soll die Auflösung und die Pixeldichte berücksichtigt werden und dafür liegen alle Grafiken in zwei verschiedenen Auflösungen vor.
Selbstverständlich kann man nicht mit festen Pixeln arbeiten. Dafür wird ja die Einheit "dp" empfohlen. Ich möchte nun wissen, wie professionelle Entwickler sowas handhaben. Die density-indipendent-pixel als Einheit lässt ja nur in XML-Layouts verwenden. Allerdings habe ich nach dem LunarLander-Beispiel gearbeitet und zeichne auf einem Canvas im SurfaceView. Ich erzeuge das Drawable-Objekt und platziere die Grafik im Code.
Nun kann man natürlich Pixel in dp umrechnen, aber ist "dp" überhaupt die Lösung, wenn ich eine Grafik(Position und Größe) auf allen Geräten korrekt darstellen will?
Woher soll ich wissen, wie weit ich mit dp maximal gehen kann. Die Doku sagt ja:
- xlarge screens are at least 960dp x 720dp
- large screens are at least 640dp x 480dp
- normal screens are at least 470dp x 320dp
- small screens are at least 426dp x 320dp
Also muss ich dennoch die Göße bzw. Auflösung eines Geräts herausfiltern.
Später will ich den Code universal einsetzbar machen. Wie gebe ich am besten die Position und Größe einer Grafik an, in Prozent? Ich weiß ja vorher nichts über Größe, Auflösung und Pixeldichte.
Es kann aber auch sein, dass ich völlig auf dem Schlauch stehe und irgendwas Fundamentales übersehe. Über jede Hilfe bin ich sehr froh.
Wen es interessiert, hier der Code, wie ich ein Bild auf allen Geräten darstelle, das den ganzen Schirm ausfüllt:
Code:
private int screenHeight = getResources().getDisplayMetrics().heightPixels;
private int screenWidth = getResources().getDisplayMetrics().widthPixels;
private Drawable bg_interface = getResources().getDrawable(R.drawable.bg_interface);
private int bgWidth = bg_interface.getIntrinsicWidth();
private int bgHeight = bg_interface.getIntrinsicHeight();
bg_interface.setBounds(0, 0,
(int)(bgWidth*(screenWidth/(float)bgWidth)),
(int)(bgHeight*(screenHeight/(float)bgHeight)));
bg_interface.draw(canvas);
Zuletzt bearbeitet: