2010-12-15 7 views
2

Ich gehe durch die Unterstützung mehrerer Bildschirme Dokumentation auf dem Android und brauche einige Erläuterungen.Android: Wie BILD für verschiedene Bildschirmauflösungen/Größe programmgesteuert angezeigt werden

Es ist mein Verständnis, dass das Entwerfen von drei einzigartigen Schnittstellen (LDPI, MDPI und HDPI) der beste Weg zur Unterstützung aller potenziellen Android-Bildschirme wäre.

aber ich glaube, das würde gelten, wenn Sie dies während der Entwurfszeit tun.

aber wenn Sie während der Laufzeit programmgesteuert eine Ansicht erstellen und Hintergrundbild festlegen möchten, würde das obige dann gelten?

Ich versuche, eine Bitmap auf einer Leinwand mit Hilfe folgender zu zeichnen,

canvas.drawBitmap (BitmapFactory.decodeResource (GetResources(), R.drawable.image_1), 0, 0, null); in meiner benutzerdefinierten Ansicht erweitern SurfaceView und dann diese Ansicht in meiner Haupttätigkeit.

jetzt verwende ich image_1.png, das ist 480 * 800 Pixel mit Gimp.

Wenn ich dieses Bild im obigen Code verwende, wird es nicht korrekt angezeigt und das Bild erscheint größer, d. H. Das Bild erscheint zu groß für den Bildschirm und kann daher nicht den vollen Inhalt anzeigen.

können Sie bitte beraten, was ist der beste Ansatz, um dies weiter zu gehen?

Dank, --ad

+0

danke für die Antwort. Das heißt, ich muss das Bild gemäß der folgenden dpi erstellen, -ldpi ist ~ 120dpi, -mdpi ist ~ 160dpi, -hdpi ist ~ 240dpi.und müssen Sie sich keine Gedanken über die Bildgröße machen? Ich meinte mit dem oben genannten dpi im Hinterkopf, ich kann Bild von jeder Größe erstellen und Android würde dafür sorgen, dass während der Anzeige im Gerät? - – adad

Antwort

0

See. Legen Sie das Bild in jeden der 3 Ordner mit verschiedenen Größen und Auflösungen, d. Hdpi, ldpi und mdpi. Und Sie können das Bild auf diese Weise nennen:

R.drawable.image_name 

Dont worry android Pflege nehmen und auf großen Bildschirm wird seine hdpi öffnen, in dem wie in kleinen Bildschirmen wird es Bild von LDPI öffnen.

Wenn Sie definieren, verwenden Höhe und Breite dp als Einheit anstelle von Pixeln.

+0

danke für die Antwort. Das heißt, ich muss das Bild gemäß der folgenden dpi erstellen, -ldpi ist ~ 120dpi, -mdpi ist ~ 160dpi, -hdpi ist ~ 240dpi. und müssen Sie sich keine Gedanken über die Bildgröße machen? Ich meinte mit dem oben genannten dpi im Hinterkopf, ich kann Bild von jeder Größe erstellen und Android würde dafür sorgen, dass während der Anzeige im Gerät? – adad

+0

Ja. Erstellen -ldpi ist ~ 120dpi, -mdpi ist ~ 160dpi, -hdpi ist ~ 240dpi Größe der Bilder werden sie entsprechend der Auflösung angezeigt. Du musst dir keine Sorgen machen. –

0

Hmm, sie ist nicht allzu vertraut mit dieser DrawBitmap Methode, aber ich sehe dies in der Dokumentation:

„Wenn die Bitmap und Leinwand unterschiedliche Dichten haben, wird diese Funktion kümmert sich um automatisch die Bitmap-Skalierung in der gleichen Dichte zu zeichnen wie die Leinwand. "

Es gibt eine getDensity und setDensity-Methoden auf Bitmap, so dass Sie getDensity aufrufen können, um zu sehen, was es ist, und dann mit setDensity vor der drawBitmap experimentieren, um zu sehen, ob das hilft.

Hinweis: Canvas verfügt auch über eine getDensity-Methode. Sie können diese also im Protokoll ausgeben und sehen, ob das Setzen der Bitmap-Dichte auf denselben Wert das Skalierungsproblem verhindert. Es gibt auch die Methode: Es gibt auch die Methode: drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint), die in der Dokumentation angibt: "Diese Funktion ignoriert die Dichte, die mit der Bitmap verknüpft ist. Dies liegt daran, dass die Koordinatenräume der Quell- und Zielrechtecke in ihren jeweiligen Dichten liegen geeigneter Skalierungsfaktor angewendet. "

+0

danke für die Antwort. Das heißt, ich muss das Bild gemäß der folgenden dpi erstellen, -ldpi ist ~ 120dpi, -mdpi ist ~ 160dpi, -hdpi ist ~ 240dpi. und müssen Sie sich keine Gedanken über die Bildgröße machen? Ich meinte mit dem oben genannten dpi im Hinterkopf, ich kann Bild von jeder Größe erstellen und Android würde dafür sorgen, dass während der Anzeige im Gerät? - – adad

Verwandte Themen