2

約20〜30のリソース画像を持つAndroidアプリを作成しようとしています。これらの画像は、キャンバスに連続して表示されるアニメーションを作成するために使用されます。最高のパフォーマンスを得るには、これらの画像を保存するためにどのコンテナを使用すればよいのでしょうか。

4

1 に答える 1

1

これらの画像はres/drawableディレクトリに配置する必要があることをすでに理解しているようです(そうでない場合は、そこに配置します)。

画像に「image0」、「image1」、「image2」などの名前を付けると、実際にこれらの文字列をループして、次のように読み込むことができます。

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

これにより、画像がそのArrayListに読み込まれます。

次に、myCanvas.drawBitmap(myList.get(i));それらを一度に1つずつキャンバスに描画するだけです。

ただし、これはメモリ消費の点で非常に高価であることに注意してください(これは非常に重要です)。画像が本当にうまく圧縮されたJPGであるかどうかは関係ありません。画像をビットマップにロードすると、画像のロードに使用している構成に応じて、各ピクセルが必要なだけのスペースを占めるように爆発します。したがって、アニメーションとして実行するためにいくつかの小さな画像でこれを行う場合、それは問題なく機能しますが、デバイスのサイズ(壁紙など)の何かが必要な場合は、間違いなく進行中にビットマップをロードおよびリリースしない限り、OutOfMemory例外(recycle()それらを呼び出す)。

ただし、アニメーション化するときにそれらに対してrecycle()を呼び出すと、画像が読み込まれるときにアニメーションで多くの一時停止が表示されます。

于 2012-04-15T16:26:45.627 に答える