我正在使用 glide 在我的 android 项目中加载 gif。
Glide.with(getActivity()).load(mainDrawable).asGif().into(mainDrawableView);
这会让 gif 不断重复,如何才能阻止 gif 循环播放?
这对我有用。滑翔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);
Github post 有一个解决方案,可以在 onResourceReady() 方法中添加请求侦听器并停止动画。
但是,这对我不起作用。可能是因为在我的例子中资源是本地的。我最终得到了以下不太糟糕的解决方法:
使用 Gimp 或 Photoshop 从 Gif 导出静态图像。当您想要停止动画时,将静止图像加载到 ImageView 中。当你想显示动画时加载原始Gif。当然,这种解决方法仅适用于小型文件和本地文件。
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;
}
};
}
要停止滑行 gif 动画,请使用 dontAnimate()
用于停止动画
Glide.with(this).load(R.drawable.123).dontAnimate().into(imgGif);
用于启动动画
Glide.with(this).asGif().load(R.drawable.123).into(imgGif);