2012-07-11 33 views
7

私は画像ビューでGIFファイルを再生したいAndroidアプリケーションを作成しています。私は多くの方法を試してみましたが、カスタムクラスを作成しましたが成功しませんでした。画像ビューでアニメーションGIF画像ファイルを再生する

誰もこれを前に実装しましたか?

+0

[アンドロイド - アニメーションGIFを表示する]の可能な重複(http://stackoverflow.com/questions/3660209/android-display-animated-gif) –

+0

この参照http://stackoverflow.com/questions/ 9158310/and-it-possible-to-set-an-animated-gif-file-as-live-wallpaper-in-android – Aerrow

答えて

7

サンプルコードはAndroid SDKのサンプルで見つけることができます。 GIF画像がImageView以外のGIF画像を使用するView

コードを拡張アクティビティに表示されているが

import android.app.Activity; 
import android.content.Context; 
import android.graphics.*; 
import android.graphics.drawable.*; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.*; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.ByteArrayOutputStream; 

public class BitmapDecode extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(new SampleView(this)); 
    } 

    private static class SampleView extends View { 
     private Bitmap mBitmap; 
     private Bitmap mBitmap2; 
     private Bitmap mBitmap3; 
     private Bitmap mBitmap4; 
     private Drawable mDrawable; 

     private Movie mMovie; 
     private long mMovieStart; 

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

     public SampleView(Context context) { 
      super(context); 
      setFocusable(true); 

      java.io.InputStream is; 
      is = context.getResources().openRawResource(R.drawable.beach); 

      BitmapFactory.Options opts = new BitmapFactory.Options(); 
      Bitmap bm; 

      opts.inJustDecodeBounds = true; 
      bm = BitmapFactory.decodeStream(is, null, opts); 

      // now opts.outWidth and opts.outHeight are the dimension of the 
      // bitmap, even though bm is null 

      opts.inJustDecodeBounds = false; // this will request the bm 
      opts.inSampleSize = 4;    // scaled down by 4 
      bm = BitmapFactory.decodeStream(is, null, opts); 

      mBitmap = bm; 

      // decode an image with transparency 
      is = context.getResources().openRawResource(R.drawable.frog); 
      mBitmap2 = BitmapFactory.decodeStream(is); 

      // create a deep copy of it using getPixels() into different configs 
      int w = mBitmap2.getWidth(); 
      int h = mBitmap2.getHeight(); 
      int[] pixels = new int[w*h]; 
      mBitmap2.getPixels(pixels, 0, w, 0, 0, w, h); 
      mBitmap3 = Bitmap.createBitmap(pixels, 0, w, w, h, 
              Bitmap.Config.ARGB_8888); 
      mBitmap4 = Bitmap.createBitmap(pixels, 0, w, w, h, 
              Bitmap.Config.ARGB_4444); 

      mDrawable = context.getResources().getDrawable(R.drawable.button); 
      mDrawable.setBounds(150, 20, 300, 100); 

      is = context.getResources().openRawResource(R.drawable.animated_gif); 
      if (true) { 
       mMovie = Movie.decodeStream(is); 
      } else { 
       byte[] array = streamToBytes(is); 
       mMovie = Movie.decodeByteArray(array, 0, array.length); 
      } 
     } 

     @Override protected void onDraw(Canvas canvas) { 
      canvas.drawColor(0xFFCCCCCC);    

      Paint p = new Paint(); 
      p.setAntiAlias(true); 

      canvas.drawBitmap(mBitmap, 10, 10, null); 
      canvas.drawBitmap(mBitmap2, 10, 170, null); 
      canvas.drawBitmap(mBitmap3, 110, 170, null); 
      canvas.drawBitmap(mBitmap4, 210, 170, null); 

      mDrawable.draw(canvas); 

      long now = android.os.SystemClock.uptimeMillis(); 
      if (mMovieStart == 0) { // first time 
       mMovieStart = now; 
      } 
      if (mMovie != null) { 
       int dur = mMovie.duration(); 
       if (dur == 0) { 
        dur = 1000; 
       } 
       int relTime = (int)((now - mMovieStart) % dur); 
       mMovie.setTime(relTime); 
       mMovie.draw(canvas, getWidth() - mMovie.width(), 
          getHeight() - mMovie.height()); 
       invalidate(); 
      } 
     } 
    } 
} 

は、あなたが同様に

http://weavora.com/blog/2012/02/07/android-how-to-use-animated-gif/

http://droid-blog.net/2011/10/14/tutorial-how-to-use-animated-gifs-in-android-part-1/

をこれらのリンクを使用することができますです
+1

whoaa ...単純なGIFを表示するには、このたくさんのコードを記述する必要がありますか?システムを変更する必要がある –

3

ネイティブImageViewはアニメーションイメージをサポートしていません。 あなたは、アニメーションGIFファイルに

  1. 使用VideoView
  2. 使用ImageViewの

を表示するために2つのオプションを使用しますが、いくつかの部分にgifファイルを分割し、それにアニメーションを適用することができます。このlink-playing-gif-animationを試してみると、望みの結果が得られます。

+1

VideoViewを使ってどのようにできるか教えていただけますか? –

+0

@SHAKIRSHABBIR http://stackoverflow.com/a/26712205/945247 – Leon

5

Gifをアンドロイドはサードパーティのライブラリを使用せずに。これが私のやり方です。

ウェブビューをご覧ください。

<WebView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageWebView" /> 

ほとんどの例では、アセットフォルダからファイルを開く方法を示していますが、ここではSDカード/メモリからファイルを開く方法を示します。

WebView webView = (WebView) findViewById(R.id.imageWebView); 
    String data = "<body> <img src = \""+ filePath+"\"/></body>"; 
    // 'filePath' is the path of your .GIF file on SD card. 
    webView.loadDataWithBaseURL("file:///android_asset/",data,"text/html","UTF-8",null); 
関連する問題