在滑行中停止gif解码

时间:2016-10-28 10:23:03

标签: android gif android-glide

我正在使用glide在我的android项目中加载一个gif。 Glide.with(getActivity()).load(mainDrawable).asGif().into(mainDrawableView);

这样可以重复gif,如何阻止gif循环?

3 个答案:

答案 0 :(得分:0)

Github post有一个解决方案来添加请求监听器&在onResourceReady()方法中停止动画。
但是,这对我没有用。可能是因为在我的情况下资源是本地的。我最终得到了以下不那么糟糕的解决方法:

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

答案 1 :(得分: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;
            }
        };
    }

答案 2 :(得分:0)

这对我有用。滑翔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);