【发布时间】:2019-07-20 02:18:35
【问题描述】:
我正在使用 glide 在我的 android 项目中加载 gif。
Glide.with(getActivity()).load(mainDrawable).asGif().into(mainDrawableView);
这会让 gif 不断重复,如何阻止 gif 循环播放?
【问题讨论】:
标签: android gif android-glide
我正在使用 glide 在我的 android 项目中加载 gif。
Glide.with(getActivity()).load(mainDrawable).asGif().into(mainDrawableView);
这会让 gif 不断重复,如何阻止 gif 循环播放?
【问题讨论】:
标签: android gif android-glide
这对我有用。滑翔 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;
}
};
}
【讨论】: