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?
Antwort
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.
Danke für die Antwort, es hilft viel. – sth4
Gern geschehen! :) –
- 1. Welchen Reaktor soll ich für Qt4 verwenden?
- 2. Welchen Controller soll ich verwenden?
- 3. enum oder definieren, welchen soll ich verwenden?
- 4. Welchen soll ich Handler oder Thread verwenden?
- 5. Welchen Weg soll ich für Connector in Redux verwenden?
- 6. Welchen soll ich verwenden? decimal.Add() oder "+"
- 7. Welchen Server soll ich für das Online Counselling Project verwenden?
- 8. Welchen Kontext soll ich in Android für Media Player verwenden?
- 9. Welchen CouchDB Adapter für Ruby soll ich verwenden?
- 10. AS3: Welchen resolvePath soll ich für meine AIR-Anwendung verwenden?
- 11. Welchen Doctype soll ich für das Marquee-Tag verwenden?
- 12. Welchen STL-Container sollte ich für einen FIFO verwenden?
- 13. Soll ich separate Docker-Container für meine Web-App verwenden?
- 14. Starten des JVM-REST-Service, welchen Stack soll ich verwenden?
- 15. Welchen soll ich verwenden? Backbone.js Router.navigate und window.location.hash
- 16. Built-in "html/template" oder "Schnurrbart", welchen soll ich verwenden?
- 17. Welchen Fehlerwert sollte ich verwenden?
- 18. Soll ich ProGuard verwenden?
- 19. Soll ich Sellerie oder Karotte für ein Django-Projekt verwenden?
- 20. Was soll ich für express.cookieParser() secret verwenden?
- 21. Soll ich Lvalue-Referenzqualifikatoren für Zuweisungsoperatoren verwenden?
- 22. Soll ich Selenium für eine Buchungsmaschine verwenden?
- 23. Was soll ich für git user.name verwenden?
- 24. Welche Programmiersprache, welchen Algorithmus sollte ich für die Wörterbuchübersetzung verwenden?
- 25. Welchen Doctype sollte ich für eine mobile Website verwenden?
- 26. Soll ich Dockerfiles oder Image-Commits verwenden?
- 27. Soll ich Delegation hier verwenden?
- 28. Soll ich CUDA hier verwenden?
- 29. Soll ich Umbraco dafür verwenden?
- 30. Soll ich ein WebView verwenden?
Sie versuchen, eine tatsächliche Animation (die aussieht, als ob sie sich bewegt) zu machen oder sprechen Sie über eine Art animierte Diashow? –