Android 在glide中停止gif解码

Android 在glide中停止gif解码,android,gif,android-glide,Android,Gif,Android Glide,我正在使用glide在我的android项目中加载gif。 Glide.with(getActivity()).load(mainDrawable).asGif()加载到(mainDrawableView)中 这使gif保持重复,如何阻止gif循环?有一个解决方案,可以在onResourceReady()方法中添加请求侦听器并停止动画。 然而,这对我不起作用。可能是因为在我的例子中,资源是本地的。最后,我找到了以下不错的解决方法: 使用Gimp或Photoshop从Gif导出静态图像。要停止动画

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

这使gif保持重复,如何阻止gif循环?

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


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

在RequestListener内部的GifDrawable中设置LoopCount

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;
            }
        };
    }
导入静态com.bumptech.glide.load.resource.gif.gifdravable.LOOP\u;
Glide.with(context.asGif().listener(getRequest()).load(R.raw.gif_capture).into(imgProgress);
公共请求侦听器getRequest(){
返回新的RequestListener(){
@凌驾
public boolean onload失败(@Nullable glide,对象模型,目标,boolean isFirstResource){
返回false;
}
@凌驾
public boolean onResourceReady(GifDrawable资源、对象模型、目标、数据源DataSource、boolean isFirstResource){
resource.setLoopCount(循环_内在);
返回false;
}
};
}

这对我来说很有用。滑翔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);
Glide.with(this).asGif(){
@凌驾
public boolean onload失败(@Nullable glide,对象模型,目标,boolean isFirstResource){
返回false;
}
@凌驾
public boolean onResourceReady(GifDrawable资源、对象模型、目标、数据源DataSource、boolean isFirstResource){
资源。setLoopCount(1);
resource.registerAnimationCallback(新的Animatable2Compat.AnimationCallback(){
@凌驾
AnimationEnd上的公共空白(可提取){
//完成指定数量的循环后执行任何操作
}
});
返回false;
}}).进入(图像视图);