2012-04-15 12 views
2

Ich versuche eine Android-App zu erstellen, die ungefähr 20-30 Ressourcenbilder enthält. Diese Bilder werden verwendet, um eine fortlaufende Animation auf Leinwand zu erstellen. Ich frage mich, in welchem ​​Container ich diese Bilder für die beste Leistung speichern soll.Welchen Container soll ich für Bitmaps verwenden?

+0

Sie versuchen, eine tatsächliche Animation (die aussieht, als ob sie sich bewegt) zu machen oder sprechen Sie über eine Art animierte Diashow? –

Antwort

1

Es klingt, als ob Sie bereits wissen, dass diese Bilder in das Verzeichnis res/drawable gehen sollten (wenn nicht, gehen sie dorthin).

vorausgesetzt, Sie Ihre Bilder so etwas wie „image0“ nennen, „image1“, „Bild2“ usw. Sie können diese Strings tatsächlich durchlaufen und sie wie folgt laden:

int myImgLen = 10;//or however many images you have, you can also do this dynamically looking for when getIdentifier returns 0, which means it didn't find anything at that name 
ArrayList<Bitmap> myList = new ArrayList<Bitmap>; 
for(int i = 0; i < myImgLen; i++) 
myList.add(BitmapFactory.decodeResource(this.getResources(), 
    this.getResources().getIdentifier("image" + i, "drawable", getPackageName())) 
); 

Diese Ihre Bilder in die geladen werden Anordnungsliste.

Sie können dann einfach myCanvas.drawBitmap(myList.get(i));, um sie in Ihre Leinwand einzeln zu zeichnen.

Beachten Sie jedoch (und das ist sehr wichtig), dass dies in Bezug auf den Speicherverbrauch EXTREM teuer ist. Es spielt keine Rolle, ob Ihre Bilder wirklich gut komprimierte JPGs sind, wenn Sie sie in Bitmaps laden, explodieren sie mit jedem Pixel und nehmen so viel Platz wie nötig ein, je nach der Konfiguration, die Sie zum Laden des Bildes verwenden. Also, wenn du das mit ein paar kleinen Bildern machst, um sie als Animation laufen zu lassen, wird das ok funktionieren, aber wenn du hoffst, etwas zu haben, das die Größe des Geräts hat (wie ein Hintergrundbild), bekommst du definitiv einen OutOfMemory-Ausnahme, es sei denn, Sie laden und veröffentlichen die Bitmaps, während Sie gehen (Aufruf von recycle() für sie).

Wenn Sie jedoch während der Animation cycle recycle() aufrufen, wird beim Laden der Bilder eine große Pause in der Animation angezeigt.

+0

Danke für die Antwort, es hilft viel. – sth4

+0

Gern geschehen! :) –

Verwandte Themen