2010-12-09 66 views
1

Je ne crois pas que ce soit une question limitée aux fonds d'écran animés, mais c'est le cas d'utilisation avec lequel je suis en train de travailler.Le moyen le plus efficace en mémoire pour mettre à l'échelle bitmap pour le fond d'écran en direct?

J'ai un 256 bitmap 256 x créé comme "tuile" pour mon fond d'écran en direct. Je suis à la recherche d'un moyen efficace de mettre à l'échelle la mémoire pour l'adapter à un écran complet de l'appareil. Je continue de rencontrer des problèmes de "dépassement de la mémoire VM" chaque fois que l'appareil tourne d'avant en arrière, ce qui suggère que je ne gère pas le problème correctement.

L'image est dessinée à l'aide de la méthode drawBitmap() de Canvas. J'ai essayé les options suivantes:

  1. Créer le bitmap, puis appelez createScaledBitmap()
  2. Créer le bitmap, puis appelez scale() sur ma toile
  3. Créer le bitmap, puis créer une matrice à « étirer » la largeur et la hauteur, et l'appliquer avec un preScale()

Si j'appelle recycle() les pistes de papier peint en direct pour une trame, puis se bloque. Si je ne fais pas pivoter l'appareil du tout, je ne reçois pas de pannes de mémoire.

Merci pour vos suggestions!

+0

J'ai eu un problème similaire. Découvrez http://stackoverflow.com/questions/7051025/how-do-i-scale-a-streaming-bitmap-in-place-without-reading-the-whole-image-first – emmby

Répondre

2

Lorsque vous faites pivoter, empêchez-vous le redémarrage de l'application comme le font la plupart des applications Android? S'il redémarre (pas sûr de la terminologie utilisée), il vous incitera à créer à nouveau l'image. Il est probable que l'image précédente n'a pas encore été collectée, vous manquez donc de mémoire. Ce que vous devriez faire est de vous assurer que l'application ne se réinitialise pas (je me souviendrai du libellé correct) lorsque vous faites une rotation, ce qui est une propriété de l'application, je crois. Ensuite, vous interceptez l'événement de rotation et manipulez la modification de l'orientation du dessin sans allouer de nouveaux objets.

Espérons que cela a du sens.

+0

Peut être utile: http : //stackoverflow.com/questions/1111980/how-to-handle-screen-orientation-change-when-progress-dialog-and-background-threa –

+0

J'apprécie le lien, mais je veux que mon papier peint puisse être tourné. Je suppose que j'aurais dû laisser la partie sur les accidents, et a demandé quelle est la meilleure façon de mettre à l'échelle une image (des trois méthodes ci-dessus - ou peut-être il y a plus?). – GJTorikian