0

同じアクティビティで2つのAnimationDrawablesを起動しましたが、メモリエラーが発生しました。画像のサイズを小さくしたので(幅=画面の幅)、品質が低下するため、これ以上小さくすることはできません。たとえば、幅=画面の幅/ 2とすると、問題は発生しますが、品質はひどいものになります。

logcatにはそれが書かれています

02-19 10:56:44.769: E/dalvikvm-heap(3118): 383916-byte external allocation too large for this process.
02-19 10:56:44.809: E/GraphicsJNI(3118): VM won't let us allocate 383916 bytes
02-19 10:56:44.809: W/dalvikvm(3118): threadid=1: thread exiting with uncaught exception (group=0x40018560)
02-19 10:56:44.819: E/AndroidRuntime(3118): FATAL EXCEPTION: main
02-19 10:56:44.819: E/AndroidRuntime(3118): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

メモリリークはないと思いますが、この記事を確認してくださいhttp://android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html潜在的なメモリリークを検出しようとしましたが、私はありません。

このプロジェクトでの最初のメモリエラーではなく、常にそれを処理するのに苦労しているので、私は本当に助けが必要です。

これが私のコードです:

private void startAnimation(AnimationDrawable animation1,AnimationDrawable animation2){
    int drawables[] = new int[] {R.drawable.fire1,R.drawable.fire2,R.drawable.fire3,R.drawable.fire4,R.drawable.fire5,R.drawable.fire6,R.drawable.fire7,R.drawable.fire8,R.drawable.fire9,R.drawable.fire10down2,R.drawable.fire11down2,R.drawable.fire12down2,R.drawable.fire13down2,R.drawable.fire14down2,R.drawable.fire15down2,R.drawable.fire16down2};
    int drawables2[] = new int[] {R.drawable.fire14down2,R.drawable.fire14down2,R.drawable.fire14down2,R.drawable.fire14down2,R.drawable.fire14down2,R.drawable.fire14down2,R.drawable.fire14down2,R.drawable.fire14down2,R.drawable.fire14down2,R.drawable.fire10up,R.drawable.fire11up,R.drawable.fire12up,R.drawable.fire13up,R.drawable.fire14up,R.drawable.fire15up,R.drawable.fire16up};
    bitmapDrawable = new BitmapDrawable[drawables.length];
    bitmapDrawable2 = new BitmapDrawable[drawables2.length];
    for (int i=0;i<drawables.length;i++) {
        bitmapDrawable[i]=new BitmapDrawable(decodeSampledBitmapFromResource(getResources(), drawables[i],width));
        Log.w("BITMAP","i="+i);
        bitmapDrawable2[i]=new BitmapDrawable(decodeSampledBitmapFromResource(getResources(), drawables2[i],width));
        animation1.addFrame(bitmapDrawable[i],50);
        animation2.addFrame(bitmapDrawable2[i],50);
    }
    animation1.setOneShot(true);
    animation2.setOneShot(true);
  image2.setLayoutParams(params);
        image2.setImageDrawable(animation1);
        image2.post(new Starter(animation1));
        image3.setLayoutParams(params);
        image3.setImageDrawable(animation2);
        image3.post(new Starter(animation2));

}
      class Starter implements Runnable {
          AnimationDrawable animation = new AnimationDrawable();
          public Starter(AnimationDrawable animation) {
              this.animation = animation;
          }

          public void run() {
              animation.start();
          }
       }

どうすればビットマップの重みを減らすことができますか(必要な場合、問題はどこか別の場所にある可能性があります)、画像の品質を維持します。問題がどこにあるのかわかりません。30枚の画像しか使用していませんが、他のアプリはもっと​​多くの画像を使用しています。

4

2 に答える 2

0

ここで、品質のサイズを変更します。

   try {
            BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
            bmpFactoryOptions.inJustDecodeBounds = true;
            bmpFactoryOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;


             bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(
                    imageFileUri), null, bmpFactoryOptions);


            bmpFactoryOptions.inSampleSize = 2;
            bmpFactoryOptions.inJustDecodeBounds = false;
            bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(
                    imageFileUri), null, bmpFactoryOptions);

ここでは、このメソッドを使用してSDカードから画像を取得しています。そしてそれを表示します。

于 2013-02-19T13:14:53.360 に答える
0

ScaledBitmapEXのサイズを小さくするために自分から 作成することができます:-

Bitmap scaledBitmap = Bitmap.createScaledBitmap(oldBitmap, 600, 600,
                        false);

これにより、サイズが600x600に減少し、サイズが小さくなります。あなたはあなたが好きなピクセルを変更することができます

于 2013-02-19T11:56:13.507 に答える