[Android開発ネタ] Gifアニメーションをループさせない

スポンサーリンク

前提

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

タイトルとURLをコピーしました