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?
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! –
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. –