くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

AndroidでGIFアニメを表示する(Glide)

Android向け画像読み込みライブラリ「Glide
いつもお世話になってるけど、GIFアニメもOKだった(´ω`)

でも、ループしてほしくないな〜とおもったら、
issueに対応方法があったので、調べたときの備忘録。

build.gradle

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.12.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
}

使い方

// For a simple view:
@Override
public void onCreate(Bundle savedInstanceState) {
  // ...
  ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

  Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
}

ループ回数を制限してGIFを表示する

このissueによると、DrawableImageViewTargetを使えばOKらしい。

@Override
public void onCreate(Bundle savedInstanceState) {
  // ...
  ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

  Glide.with(this).load("http://goo.gl/gEgYUd")
       .into(new DrawableImageViewTarget(imageView) {
         @Override
         public void onResourceReady(Drawable resource, @Nullable Transition<? super Drawable> transition) {
           if (resource instanceof GifDrawable) {
             ((GifDrawable) resource).setLoopCount(2);
           }
           super.onResourceReady(resource, transition);
         }
       });
}

ループ回数を設定できるクラスを作るとこんな感じ。

import android.graphics.drawable.Drawable;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.bumptech.glide.load.resource.gif.GifDrawable;
import com.bumptech.glide.request.target.DrawableImageViewTarget;
import com.bumptech.glide.request.transition.Transition;

public class LoopGifDrawableImageViewTarget extends DrawableImageViewTarget {
    private int loopCount = 0;

    public LoopGifDrawableImageViewTarget(ImageView view, int loopCount) {
        super(view);
        this.loopCount = loopCount;
    }

    @Override
    public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
        if (resource instanceof GifDrawable) {
            if (this.loopCount > 0) {
                ((GifDrawable) resource).setLoopCount(this.loopCount);
            }
        }
        super.onResourceReady(resource, transition);
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
  // ...
  ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

  Glide.with(this).load("http://goo.gl/gEgYUd")
       .into(new LoopGifDrawableImageViewTarget(imageView));
}

以上!! 簡単!!

参考にしたサイト様