Playing an animated GIF image file in imageview

后端 未结 3 2137
既然无缘
既然无缘 2021-02-15 15:51

I am making an Android application, in which I want to play a GIF file in an imageview. I have a tried a lot of ways, made a custom class but haven\'t succeeded.

Has an

相关标签:
3条回答
  • 2021-02-15 16:37

    Natively ImageView does not support animated image. You can use two options to show animated gif file

    1. Use VideoView
    2. Use ImageView

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

    0 讨论(0)
  • 2021-02-15 16:38

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

    The code to use gif image other than ImageView is

    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 use these links as well

    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/

    0 讨论(0)
  • 2021-02-15 16:53

    You can display Gif in android without using any 3rd party libraries. This is how I did that.

    Take a web view.

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

    Most of the examples shows how to open a file from asset folder, but here I show you how to open it from a 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);
    
    0 讨论(0)
提交回复
热议问题