停止glide中的gif解码

问题描述 投票:0回答:4

我正在使用 glide 在我的 android 项目中加载 gif。

Glide.with(getActivity()).load(mainDrawable).asGif().into(mainDrawableView);

这会让 gif 不断重复,如何才能阻止 gif 循环播放?

android gif android-glide
4个回答
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);

1
投票

Github post 有一个解决方案,可以在 onResourceReady() 方法中添加请求侦听器并停止动画。
但是,这对我不起作用。可能是因为在我的例子中资源是本地的。我最终得到了以下不太糟糕的解决方法:

使用 Gimp 或 Photoshop 从 Gif 导出静态图像。当您想要停止动画时,将静止图像加载到 ImageView 中。当你想显示动画时加载原始Gif。当然,这种解决方法仅适用于小型文件和本地文件。


0
投票

RequestListener 内 GifDrawable 中的 setLoopCount

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;
            }
        };
    }

0
投票

要停止滑行 gif 动画,请使用 dontAnimate()

用于停止动画

Glide.with(this).load(R.drawable.123).dontAnimate().into(imgGif);

用于启动动画

Glide.with(this).asGif().load(R.drawable.123).into(imgGif);
© www.soinside.com 2019 - 2024. All rights reserved.