我正在使用Glide在启动画面中加载GIF图像。完成GIF加载后,我想使用Intent打开下一个活动。
我试过下面的代码,
Glide.with(this).load(R.drawable.image1).override(width, height).into(imageViewTarget);
和Glide版本:com.github.bumptech.glide:glide:3.7.0'
但是无法找到任何帮助,请帮助解决这个问题。
把听众放到这个..
Glide.with(this)
.load(R.drawable.image1)
.asGif()
.override(width, height)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
//AFTER LOAD OUT YOUR LOGIC
//open next activity
return false;
}
})
.into(imageViewTarget);
并确保您的imageview始终可见。希望这可以帮助..
从我的角度来看,你想要的是在GIF动画完成时启动另一个活动,而不是将gif加载到你的ImageView中。在这种情况下,您最好测量完成gif动画所需的时间并使其成为局部变量。为了确保gif动画完整,最好让时间比动画成本更长。然后这样做。
long gifAnimationTime = 1000;// A bit more than the gif animation,you can ajust this to your situation.
Glide.with(this)
.load(R.drawable.image1)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// start your activity here.
}
}, gifAnimationTime);
return false;
}
})
.into(imageViewTarget);
我有新的东西。试试这个:
Movie movie = Movie.decodeByteArray(gifdata,offset,length);
long period = movie.duration();
花了几个小时试图为Glide V4找到解决方案,这就是我最终遇到的并且它完美无缺。 https://github.com/bumptech/glide/pull/3438
@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) {
//in your case start new Activity
}
});
return false;
}
}).into(imageView);