Play animated GIF image file in image view

I am making an Android application in which I want to play a GIF file in an image view. I tried many ways, made a custom class, but could not.

Has anyone implemented this before?

+7
source share
3 answers

You can find sample code in the Android SDK samples. The gif image is displayed in an action that extends the View

To use a gif image other than ImageView , use

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

You can also use these links.

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/

+7
source

You can display Gif in android without using any third-party libraries. Here is how I did it.

Make a web presentation.

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

Most examples show how to open a file from a resource folder, but here I will show you how to open it from an SD card / memory.

  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); 
+5
source

Naturally, ImageView does not support animated images. You can use two options to display an animated gif file.

  • Use VideoView
  • Use ImageView

But break the gif file into several parts, and then apply animation to it. Try this link-playing-gif animation, you will get the desired result.

+3
source

All Articles