我正在使用glide在我的android项目中加载一个gif。
Glide.with(getActivity()).load(mainDrawable).asGif().into(mainDrawableView);
这样可以重复gif,如何阻止gif循环?
答案 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);