Остановить декодирование gif в glide

Я использую glide для загрузки gif в свой проект Android. Glide.with(getActivity()).load(mainDrawable).asGif().into(mainDrawableView);

Это удерживает GIF на повторе, как можно остановить зацикливание GIF?


person DarkCoderRises    schedule 28.10.2016    source источник


Ответы (3)


Это то, что сработало для меня. Скольжение V4

Glide.with(this).asGif().load(/*your gif url*/).listener(new RequestListener<GifDrawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
    return false;
}

@Override
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
    resource.setLoopCount(1);
    resource.registerAnimationCallback(new Animatable2Compat.AnimationCallback() {
        @Override
        public void onAnimationEnd(Drawable drawable) {
            //do whatever after specified number of loops complete
        }
    });
    return false;
}}).into(imageView);
person landnbloc    schedule 19.07.2019

В сообщении Github есть решение, позволяющее добавить прослушиватель запросов и остановить анимацию в методе onResourceReady(). .
Однако мне это не помогло. Может быть потому, что в моем случае ресурс был локальным. В итоге я нашел следующий не такой уж плохой обходной путь:

Экспортируйте неподвижное изображение из Gif с помощью Gimp или Photoshop. Загрузите неподвижное изображение в ImageView, если хотите остановить анимацию. Загрузите оригинальный Gif, когда хотите показать анимацию. Конечно, этот обходной путь подходит только для небольших и локальных файлов.

person Ruturaj Patil    schedule 12.09.2017

setLoopCount в GifDrawable внутри RequestListener

import static com.bumptech.glide.load.resource.gif.GifDrawable.LOOP_INTRINSIC;

Glide.with(context).asGif().listener(getRequest()).load(R.raw.gif_capture).into(imgProgress);
public RequestListener<GifDrawable> getRequest() {
        return new RequestListener<GifDrawable>() {
            @Override
            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
                return false;
            }

            @Override
            public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
                resource.setLoopCount(LOOP_INTRINSIC);

                return false;
            }
        };
    }
person AMD    schedule 09.01.2019