2016-05-10 3 views
1

Ich habe folgende ziehbar mit verschiedenen Größen für MDPI, hdpi, xhdpi ....android ziehbar Bild nimmt viel Speicher im Vergleich zu seiner Plattengröße

[email protected] 1 xxx yyy 31K Apr 16 14:19 myImage.9.png 
[email protected] 1 xxx yyy 63K Apr 16 14:19 myImage.9.png 
[email protected] 1 xxx yyy 95K Apr 16 14:19 myImage.9.png 
[email protected] 1 xxx yyy 196K Apr 16 14:19 myImage.9.png 
[email protected] 1 xxx yyy 307K Apr 16 14:19 myImage.9.png 

Ich benutze es als

<ImageView 
     android:paddingLeft="10dp" 
     android:paddingRight="0dp" 
     android:layout_centerVertical="true" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:scaleType="fitCenter" 
     android:src="@drawable/myImage" /> 
folgt

Meine App an diesem Punkt nimmt 20MB

Wenn ich eine Änderung android:src="@null"

Meine app machen an dieser Stelle dauert 10MB

Warum dauert das Zeichnen so viel Speicher, wo die tatsächliche Größe viel weniger ist ??

+1

siehe http://StackOverflow.com/a/13120950/6097062 –

+1

Berechnen Sie 'X * Y * 4' abhängig von Ihrer Bildauflösung. –

+1

@Saurabh danke für Zeiger ... es hat geholfen. – GJain

Antwort

2

Es hängt von Ihrer Bildschirmauflösung ab, wie viele Punkte auf dem Bildschirm zu sehen sind. Jeder Punkt hat Farbinformation oder Tiefe (abhängig von Android Version> = 2.3 lädt Bitmaps standardmäßig mit 32 Bit).

Selbst bei Bildern mit niedriger Auflösung skaliert OS es (addiert Punkte), so dass es auf einem großen Bildschirm angezeigt werden kann.

So erhalten Sie X * Y * Farbtiefe.

Wie hier üblich haben wir uns geeinigt: Größe auf der Festplatte (echte Auflösung und Farbtiefe), CPU-Zeit (Skalierung).

Zum Beispiel haben Sie Telefon mit Bildschirmauflösung 200 * 100 = 20_000 Punkte. Wenn Sie etwas auf dem gesamten Bildschirm zeichnen möchten, müssen Sie alle 20_000 Punkte beleuchten und jeder Punkt hat Farbinformationen (der einfache Fall RGB). Als Ergebnis 20_000 Punkte * Tiefe (in unserem Fall 32 Bit) = 640_000 Bits.

Überprüfen Sie graphics architecture internals.

+0

Ich verstehe es nicht ganz ... Könnten Sie bitte ein kleines Beispiel geben. Ich lege jetzt alle Drawbles auf hdpi Größe in nodpi und benutze nodpi in code .... denkst du, das ist über Geräte hinweg ok? – GJain

+0

Größere Bildschirmdichte mehr Speicher, den Sie benötigen. –

Verwandte Themen