前提
Glideを使用している。
https://github.com/bumptech/glide
やり方
LoadのListenerを追加して、Load後に渡されてくるGifDrawableでsetLoopCountで値を設定すれば良い。
//
public void startGifAnimation() {
Glide.with(this).load(R.raw.gif).listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Drawable> target, boolean b) {
return false;
}
@Override
public boolean onResourceReady(Drawable drawable, Object o, Target<Drawable> target, DataSource dataSource, boolean b) {
((GifDrawable) drawable).setLoopCount(1);
return false;
}
}).into(mGifImageView);
}
おまけ
Gifアニメーションを途中で止めたかったので、以下のように無理やり止めたように見せかけた。
ただ、これだとGifアニメーションを途中から再開することはできない。 なにかやり方はあるんだろうけど、今回やりたかったのは止めるだけだったから、とりあえず良しとする。
//
public void stopGifAnimation() {
mGifImageView .setDrawingCacheEnabled(true);
Bitmap cache = mGifImageView.getDrawingCache();
Bitmap screenShot = Bitmap.createBitmap(cache);
mGifImageView.setDrawingCacheEnabled(false);
mGifImageView.setImageBitmap(screenShot);
}
何をやっているかって言うとGifを乗せているImageViewのキャプチャを作成して、そのキャプチャをImageViewに乗せ換えているという荒業w