Chi*_*oni 6 animation android gif android-glide
我有一个GIF图像,想加载启动画面.我遇到了一些像android-gif-drawable 和Glide这样的库
有什么方法可以听一个动画周期完成吗?我的意思是一旦动画循环完成(整个动画完成,不重复)我想要一个监听器,动画完成,并为我们提供一些回调.有点像:
SomeLibrary.load("GIF")
.into(imageview)
.repeat(false)
.setOnAnimationCompleteListener(new OnAnimationCompleteListener(){
public void onAnimationComplete(){
// Animation is completed. Do whatever you want to do..
}
});
Run Code Online (Sandbox Code Playgroud)
我曾与两个库合作但是正在寻找我上面提到的功能.
lan*_*loc 16
对于 Glide V4,我发现这是最好的答案。https://github.com/bumptech/glide/pull/3438
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);
Run Code Online (Sandbox Code Playgroud)
Cod*_*dus 12
更新2018/9/25 在此代码中使用了很长时间
我发现有些手机并没有真正开始运行onResourceReady.意味着我得到isRunning() == false一次onResourceReady.
解决方案:一开始就睡觉.
@Override
public boolean onResourceReady(final GifDrawable resource, Object model, Target<GifDrawable> 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;
}
Run Code Online (Sandbox Code Playgroud)
起源
由于GIF在播放时有延迟,我使用线程来监控播放的结束.不是一个非常好但有效的方法.
Glide.with(this).asGif().load(R.raw.gif)
.apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE)).listener(new RequestListener<GifDrawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
onGifFinished();//do your stuff
return false;
}
@Override
public boolean onResourceReady(final GifDrawable resource, Object model, Target<GifDrawable> 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);
Run Code Online (Sandbox Code Playgroud)
你可以使用这个gif库LINK,它有onAnimationCompleted,当一个循环完成时被调用,它还有geturation方法,它给出一个循环的持续时间,你可以使用任何你想要的
File gifFile = new File(getFilesDir(),"anim.gif");
GifDrawable gifFromFile = new GifDrawable(gifFile);
gifFromFile.addAnimationListener(new AnimationListener() {
@Override
public void onAnimationCompleted(int loopNumber) {
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6651 次 |
| 最近记录: |