2012-04-15 41 views
2

私は約20-30のリソースイメージを持つAndroidアプリケーションを作ろうとしています。これらの画像は、キャンバス上に連続したアニメーションを表示するために使用されるので、最高のパフォーマンスを得るためには、これらの画像を保存するためにどのコンテナを使用すべきですか?ビットマップにはどのようなコンテナを使用しますか?

+0

あなたは実際のアニメーション(それが動いているように見える)を作ろうとしているのですか、何らかのアニメーションスライドショーについて話していますか? –

答えて

1

これらの画像がres/drawableディレクトリになければならないことは既に理解されているようです(そうでなければ、どこに行くのか)。

あなたが実際にそれらの文字列をループし、このようにそれらをロードできるなど、「画像2」、あなたは「image0」、「画像1」のようなあなたのイメージの何かに名前を付けると仮定すると:これはそれにあなたのイメージをロードします

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())) 
); 

配列リスト。

次に、簡単にmyCanvas.drawBitmap(myList.get(i));をキャンバスに1つずつ描画できます。

しかし、これは非常に重要であり、これはメモリ消費量が非常に高価であることに注意してください。画像がきれいに圧縮されたJPGであるかどうかは関係ありません。ビットマップにロードすると、イメージをロードするために使用している設定ごとに、各ピクセルが必要なだけのスペースを占めて爆発します。だから、あなたがアニメーションとしてそれらを実行するためにいくつかの小さな画像でこれをやっているなら、それはうまくいくだろうが、あなたが間違いなく(壁紙のような)デバイスの大きさであるものを持っていることを望んでいるなら、 OutOfMemory Exception。あなたが行くときにビットマップをロードして解放しないでください(それらにrecycle()を呼び出します)。

アニメーションの際にrecycle()を呼び出すと、画像の読み込み中にアニメーションが一時停止することが多く見られます。

+0

答えをいただきありがとうございます。 – sth4

+0

あなたは大歓迎です! :) –

関連する問題