2012-04-17 8 views
0

は、私がここで私は次のコードでGIF画像を使用しています、アンドロイドのアプリケーションを開発していGif画像をサーフェスビューで使用しますか?

private static byte[] streamToBytes(InputStream is) { 
    ByteArrayOutputStream os = new ByteArrayOutputStream(1024); 
    byte[] buffer = new byte[1024]; 
    int len; 
    try { 
     while ((len = is.read(buffer)) >= 0) { 
      os.write(buffer, 0, len); 
     } 
    } catch (java.io.IOException e) { 
    } 
    return os.toByteArray(); 
} 

//クラス

is = this.context.getResources().openRawResource(R.drawable.fondo_juego_nexus); 

      if (DECODE_STREAM) { 
        System.out.println("in if DECODE_STREAM"); 
       mMovie = Movie.decodeStream(is); 
      } 

      else { 
       byte[] array = streamToBytes(is); 
       System.out.println("in else DECODE_STREAM"); 
       mMovie = Movie.decodeByteArray(array, 0, array.length); 
      } 



// In On Draw 

    long now = android.os.SystemClock.uptimeMillis(); 

     if (mMovieStart == 0) { // first time 
      mMovieStart = now; 
     } 
     if (mMovie != null) { 
      System.out.println("in if (mMovie != null) " + mMovie.duration()); 
      int dur = mMovie.duration(); 
      if (dur == 0) 
      { 
       dur = 1000; 
       System.out.println("in if movie if"); 
      } 
      System.out.println("duration is "+ dur); 
      int relTime = (int)((now - mMovieStart) % dur); 
      mMovie.setTime(relTime); 
      System.out.println("in if displaying syd"); 
      mMovie.draw(canvas,120,100); 

     } 

のなどの活動からontouch I出口によってコンストラクタで私は上記の方法での活動を終了して、前の活動に戻り を行くと、活動WHに再び来る

else if(_y<=60 && _x<=60) 
     { 


      sp.play(mySound1, volume, volume, 0, 0, 1); 
      sp.release(); 
      playr.stop(); 
      tme.cancel(); 
      act.finish(); 

} 

富栄私はgifイメージを使用していますが、デバイスgalaxy s2、2.3.3では表示されませんが、2.2の同じサイズのエミュレータでは、これは問題ありません。

この方法に問題があります。 GIF画像は

私は私は私の問題の解決策を持って、このエラー

答えて

1

を削除するために何をすべきか、私はそれがどのように良いかわからない、 が、それは、以前の私は、コンストラクタでこのコードを使用していた私のために働きました

if (DECODE_STREAM) { 
       mMovie = Movie.decodeStream(is); 
      } else { 
       byte[] array = streamToBytes(is); 
       mMovie = Movie.decodeByteArray(array, 0, array.length); 
      } 

     } 

これはworkign f私は初めて暗黙のうちに を実行していたガベージコレクタが多すぎてメモリが不足していたと思います。また、画像の初期化も、 ゲーム、そして私はちょうど

System.gc(); 

と手動でガベージコレクタを追加し、この後にすべての画像を初期化していることだったやった も 次のコードを配置

if (DECODE_STREAM) { 
       mMovie = Movie.decodeStream(is); 
      } else { 
       byte[] array = streamToBytes(is); 
       mMovie = Movie.decodeByteArray(array, 0, array.length); 
      } 

     } 
ガベージコレクタ

の暗黙の実行を回避し、現在のgif画像が細かい

を働いているこの 後

関連する問題