4

This is my code where I am loading a gif from URL. I am using Glide Library. This code is not working, blank activity display

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_background_gif);

            ImageView imageView = (ImageView) findViewById(R.id.gifImageView);

            //Glide.with(this).load(getResources().getDrawable(R.drawable.sample_img)).into(imageView);

            Glide.with(this)
                    .load("http://more-sky.com/data/out/6/IMG_105566.gif")
                    .into(new GlideDrawableImageViewTarget(imageView));

        }
Jagjeet Singh
  • 204
  • 1
  • 2
  • 12

6 Answers6

2

Try using this

 Glide.with(context)
.load(imageUrl)
.asGif()
.placeholder(R.drawable.loading2)
.crossFade()
.into(imageView);
Ranjan
  • 1,326
  • 18
  • 38
  • see the link http://stackoverflow.com/questions/31082330/show-gif-file-with-glide-image-loading-and-caching-library – Ranjan Dec 22 '16 at 09:54
1

you can programatically achieve it, follow this link

http://www.geeks.gallery/how-to-display-the-animated-gif-image-in-android/

OR use library,

https://github.com/koral--/android-gif-drawable

https://github.com/felipecsl/GifImageView

Mrinmoy
  • 1,370
  • 2
  • 18
  • 28
1

You can also use Picasso

Picasso.with(context)
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)
VLL
  • 9,634
  • 1
  • 29
  • 54
Kunal
  • 55
  • 1
  • 9
0

You can use WebView to load GIF image. Implementation is very easy and works like a charm. Create html page. Here's the code:

<html style="margin: 0;">
<body style="margin: 0;">
<img src="imagename.gif" style="width: 100%; height: 100%" />
</body>
</html>

Create assets folder and create html folder in assets. Copy Gif image and webpage in html folder. Add WebView in your xml.

MainActivity

webView = (WebView)findViewById(R.id.webView);
webView.setBackgroundColor(Color.TRANSPARENT); //for gif without background
webView.loadUrl("file:///android_asset/html/HTML_PAGE_NAME.html");
0

From P OS gif is now directly supported by Android and it is easy to load.
Java Code (loading from file):

ImageDecoder.Source source = ImageDecoder.createSource(new File(fileName));
AnimatedImageDrawable drawable = (AnimatedImageDrawable) ImageDecoder.decodeDrawable(source);
imageView.setImageDrawable(drawable);
drawable.start();

Kotlin code(loading from assets):

val source = ImageDecoder.createSource(assets, assetFileName)
val drawable = ImageDecoder.decodeDrawable(source)

imageView.setImageDrawable(drawable)
if (drawable is AnimatedImageDrawable) {
  drawable.start()
}
singularity
  • 147
  • 1
  • 11
0

I used Movie class to display animated GIF according to this page. Below is the class I created to diaplay the gif and method invoking it. It is deprecated from SDK 28 and AnimatedImageView is recommended. I used both and it turned out to me that old, unofficial way (with Movie) is faster and more reliable (AnimatedImageView hangs freezes sometimes).

Class to display animiated GIF with Movie

public class ShowGifView extends View {
    private Movie movie;
    private int gifImageDrawableId;
    private final Context ctx;
    private long gifStart = 0;

    public ShowGifView(Context context) {
        super(context);
        // Make the custom view focus.
        setFocusable(true);
        ctx = context;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        long now = System.currentTimeMillis();

        if (gifStart == 0) {
            gifStart = now;
        }

        if (movie != null) {
            // Get gif movie duration time.
            int duration = movie.duration();
            if (duration == 0) {
                duration = 1000;
            }

            // Get played frame percentage.
            int relTime = (int)((now - gifStart) % duration);

            // Set current gif frame time.
            movie.setTime(relTime);

            // Get custom view width and height.
            int width = this.getWidth();
            int height = this.getHeight();

            // Get gif image width and height.
            int movieWidth = movie.width();
            int movieHeight = movie.height();

            // Scale canvas size to fit the custom view.
            canvas.scale((float)width / movieWidth, (float)height / movieHeight);

            // Draw the gif image frame to custom view canvas.
            movie.draw(canvas, 1, 1);

            // This method will invoke onDraw method.
            invalidate();
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if(movie != null){
            int scale = heightMeasureSpec / movie.height();
            setMeasuredDimension(movie.width() * scale, movie.height() * scale);
        }else{
            setMeasuredDimension(getSuggestedMinimumWidth(), getSuggestedMinimumHeight());
        }
    }

    public int getGifImageDrawableId() {
        return gifImageDrawableId;
    }

    public void setGifImageDrawableId(int gifImageDrawableId) {
        this.gifImageDrawableId = gifImageDrawableId;
    }

    // Call this method to read the drawable gif image to create movie object.
    public void drawGif()  {
        Resources resources = ctx.getResources();
        InputStream inputStream = resources.openRawResource(gifImageDrawableId);
        movie = Movie.decodeStream(inputStream);

        // Invalidate the view and invoke onDraw method.
        invalidate();
    }
}

Method invoking this:

    private View addAnimatedGif(ConstraintLayout lout, int animatedGif) {
        ShowGifView resultView = new ShowGifView(getApplicationContext());

        // Set Layer type to display animated GIF on all APIs
        resultView.setLayerType(View.LAYER_TYPE_SOFTWARE, new Paint());
        resultView.setGifImageDrawableId(animatedGif);
        resultView.drawGif();

        ConstraintSet cSet = new ConstraintSet();
        lout.addView(resultView);
        resultView.setId(View.generateViewId());
        int id = resultView.getId();

        cSet.clone(lout);
        cSet.connect(id, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, 0);
        cSet.connect(id, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 0);
        cSet.connect(id, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END, 0);
        cSet.connect(id, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 0);

        cSet.applyTo(lout);

        return resultView;
    }
basileus
  • 295
  • 3
  • 9