更新2018/9/25
在此代码中使用了很长时间
我发现有些手机并没有真正开始在onResourceReady上运行.意味着一旦onResourceReady被调用,我得到isRunning()== false.
解决方案:一开始就睡觉.
@Override
public boolean onResourceReady(final GifDrawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
resource.setLoopCount(1);
new Thread(new Runnable() {
@Override
public void run() {
Thread.sleep(200);
while(true) {
if(!resource.isRunning()) {
onGifFinished();//do your stuff
break;
}
}
}
}).start();
return false;
}
起源
由于GIF在播放时有延迟,我使用线程来监控播放的结束.
不是一个非常好但有效的方法.
Glide.with(this).asGif().load(R.raw.gif)
.apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE)).listener(new RequestListener() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
onGifFinished();//do your stuff
return false;
}
@Override
public boolean onResourceReady(final GifDrawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
resource.setLoopCount(1);
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
if(!resource.isRunning()) {
onGifFinished();//do your stuff
break;
}
}
}
}).start();
return false;
}
}).into(iv);