2012-04-04 17 views
2

Ich habe Bilder, die auf die Bildschirmgröße skalieren müssen. Die Bilder enthalten auch Text, der in eine zweite Sprache übersetzt werden muss. Es gibt also zwei Versionen für jedes Bild, eines für jede Sprache.Reduzieren Android Alternative Drawable Ressourcen

Google empfiehlt, eine Bildressource pro Dichte zu verwenden. Also würde ich meine zwei Bilder nehmen und sie mit vier multiplizieren: xhdpi, hdpi, mdpi und ldpi. Aber dann sagen Google, um unterschiedliche Bildressource für verschiedene Bildschirmgrößen zu haben. Das multipliziert meine Bilder wieder mit vier: xgroß, groß, normal und klein. Ich möchte nicht 32 Kopien von jedem Bild erstellen!

Ich frage mich, ob etwas mit der Erstellung der Bilder für xlarge Bildschirme und xhdpi Dichten nur falsch ist. IE - Beste Qualität. Lassen Sie Android die Bilder für niedrigere Dichten nach seinen Standards für dp-Einheiten herunterskalieren. Und wenn ich auf kleinere Bildschirme zeichne, könnte ich die Canvas-Klasse verwenden, um weiter zu verkleinern. Ich konnte das resultierende skalierte Bitmap-Objekt für die Verwendung zwischenspeichern, wenn es die Bitmap neu zeichnen musste, um teure, immer wieder ablaufende Skalierungsberechnungen zu vermeiden.

Gibt es einen Nachteil, dies zu tun? Oder gibt es einen besseren Weg, um so viele Kopien desselben Bildes zu vermeiden?

Antwort

0

Beim Herunterskalieren großer Bilder auf kleineren (Low-End-) Geräten wird die Leistung beeinträchtigt. Ob dies auffällt, hängt von der Anzahl der Bilder ab, die Sie zeigen müssen.
Das gleiche gilt mutatis mutandis für das Gedächtnis.

+0

Danke, gutes Feedback. Ein Punkt zur Verdeutlichung: Ich hatte gehofft, dass durch das Zwischenspeichern der herunterskalierten Bitmap dann Müll das ursprüngliche größere Bild sammeln sollte. Ich denke nicht, dass dieses einmalige GC-Event so wirkungsvoll sein wird, dass es einen Unterschied für diese spezielle App macht. Aber wissen Sie, ob die herunterskalierte zwischengespeicherte Bitmap-Instanz den gleichen Speicherbedarf hat oder größer ist, als wenn sie mit der alternativen Ressourcenmethode von Google instanziiert würde? (Nehmen wir an, beide Methoden ergeben Bitmaps mit den gleichen physikalischen Abmessungen.) Wenn größer, könnte das ein Problem für mich sein. Vielen Dank! –

+0

Gute Frage. Ich bin mir nicht sicher, wie Sie vorgehen wollen, so dass es schwierig ist, eine endgültige Antwort zu geben (vorausgesetzt, ich weiß es :-)). Sie können jedoch den folgenden (indirekten) Test durchführen: Nach dem Laden einer Bitmap aus den Ressourcen nehme ich an, dass isMutable() false zurückgibt. Ich nehme an, dass nach der Skalierung die resultierende Bitmap isMutable() = true hat, was indirekt anzeigt, dass es eine Kopie ist und daher wahrscheinlich ihren eigenen Speicher hat. –

0

Ich erstelle Bitmaps nur für die höchste xhdpi Pixeldichte und dann auf anderen Bildschirmtypen testen.

Wenn ein Bitmap auf einem Bildschirm mit niedrigerer Dichte schlecht aussieht, mache ich es speziell für diese Dichte neu. Und das passiert ziemlich selten ...

Auch spezielle Bitmaps für verschiedene Bildschirmgrößen (klein/xlarge) wird nicht benötigt - machen Sie einfach Ihre ImageView-s kleiner/größer - Bildskalierung ist kein langsamer Vorgang, so in In den meisten Fällen müssen Sie sich auch keine Gedanken darüber machen (es sei denn, Ihre Bitmaps decken den gesamten Bildschirm ab).

Verwandte Themen