2011-01-04 11 views
0

Ich erstelle ein Spiel, das Vollbild ist. Ich benutze ein Bild für den Hintergrund und zeichne Bilder darüber. Das Hintergrundbild sieht in allen Geräten gut aus, aber ich kann die Overlay-Bilder nicht auf allen Geräten an derselben Stelle zeichnen.Zeigen Sie das Bild an derselben Stelle auf mehreren Bildschirmen an | Android

Zum Beispiel, wenn ich

canvas.drawBitmap(overlay, 365, 85, paint);

Es wird das Bild perfekt für Handys ausrichten, die 854px Breite aufweisen. Aber alles, was niedriger ist, als dass es nach rechts geschoben wird.

Ich habe versucht, mit dip herumspielen, aber ich kann nicht scheinen, dass herauszufinden. Gibt es irgendwelche, wo ich sicherstellen kann, dass sie in allen Auflösungen richtig aufgereiht sind?

+0

Sie sollten die x, y-Koordinaten entsprechend der Bildschirmgröße des Geräts nicht einen konstanten Wert übergeben. – Sandy

Antwort

1

Wenn Sie es so machen möchten, müssen Sie wahrscheinlich die Position basierend auf der Größe des Bildschirms berechnen.

Sie könnten diese mit so etwas wie diese finden:

DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    wPix = dm.widthPixels; 
    hPix = dm.heightPixels; 
+0

Also musste ich eine Switch-Anweisung für jede Bildschirmgröße einrichten? – Dave

+0

Je nachdem, warum die Position geändert wird, denke ich, dass Sie möglicherweise eine Art von Berechnung durchführen können. Als Beispiel: Wenn Sie Ihr Bild immer horizontal in der Mitte positionieren, benötigen Sie für einen fiktiven Bildschirm mit 200 Pixel Breite die Position '100'. Für 500 wollen Sie '250' usw. Aber statt eines Schalters würden Sie natürlich "width/2" verwenden. Etwas ähnliches könnte für diesen Fall möglich sein? – Nanne

+0

Kann ein Verhältnis so lange verwenden, wie Sie mit Ihrer Rundung vorsichtig sind, damit die Dinge nicht unordentlich werden, sondern Ihre Layouts für eine bestimmte Auflösung entwerfen, und wenn der Bildschirm nicht auf dieser Auflösung gerendert wird, würden Sie die Position skalieren (und vielleicht die Größe, wenn das auch wichtig ist), um angemessener zu sein. – James

1

Ich vermute, dass Sie 1.6 oder höher zielen. Der Grund dafür, dass Ihr Hintergrund auf jedem Gerät in Ordnung ist, liegt darin, dass Android beim Dekodieren Ressourcen automatisch auf die Zielbildschirmdichte skaliert. Sie können dies verhindern, indem Sie Ihre Ressourcen stattdessen in "drawable-nodpi" platzieren (Sie müssen dieses Verzeichnis erstellen) oder indem Sie die entsprechenden Optionen an die Bitmap-Funktionen übergeben (sehen Sie in der Dokumentation nach.) Wenn Sie das tun, dann Sie müssen alle Ihre Bitmaps manuell skalieren. Die anderen zwei Antworten haben die richtige Idee, greifen Sie auf Ihre Bildschirmgröße und berechnen Sie alle Pixelwerte. Verwenden Sie niemals Konstanten.