3

フレームごとのアニメーションをキャンバスに描画しています。これを行うために使用している写真が約 100 枚あります (合計で約 1.5MB)。私はこれを行うことから始めました:

s000 = BitmapFactory.decodeResource(getResources(), R.drawable.s0);
s001 = BitmapFactory.decodeResource(getResources(), R.drawable.s1); ...etc...

すべての画像に適用し、各画像をキャンバスに描画します。

c.drawBitmap(s000, X, Y, null);

アニメーションを作ること。

問題は、「OutOfMemoryError: ビットマップ サイズが VM の予算を超えています」というエラーが発生することです。このエラーを発生させずにすべての写真を読み込むにはどうすればよいですか? 1.5MB は大量のメモリですか、それともメモリ リークがありますか? メモリリークを修正するにはどうすればよいですか?

ご助力ありがとうございます。私はアンドロイドに慣れていないので、例を残してください。私が理解できないことをするように言うだけではありません:)ありがとう

4

3 に答える 3

2

描画するすべてのフレームについて、次のようにしてください。

s000 = BitmapFactory.decodeResource(getResources(), R.drawable.s0);
c.drawBitmap(s000, X, Y, null);
s000.recycle();
s000 = null;

これは、フレームを描画した後にメモリを解放しようとします。

編集

myImgLen = 30;
Bitmap bitmap = null;
for (int i = 0; i < myImgLen; i++) {
    bitmap = BitmapFactory.decodeResource(getResources(), getResource‌​s().getIdentifier("s" + i, "drawable", getPackageName()));
    c.drawBitmap(bitmap, X, Y, null);
    bitmap.recycle();
    bitmap = null;
}
于 2012-07-05T10:32:38.667 に答える
0

res フォルダー内の res->drawable-xhdpi make フォルダーに画像を保存します。
詳細については、このリンクhttp://developer.android.com/guide/practices/screens_support.htmlを参照してください。

于 2012-07-05T09:56:17.330 に答える
0

画像のサイズが間違っている可能性があります。この回答を参照してください:画像をビットマップ オブジェクトにロード中に奇妙なメモリ不足の問題が発生しました

于 2012-07-05T09:58:01.780 に答える