首页 / 安卓 / java-按顺序播放帧动画.安卓系统
java-按顺序播放帧动画.安卓系统
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-按顺序播放帧动画.安卓系统,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3308字,纯文字阅读大概需要5分钟。
内容图文
好的,有人提出了类似的问题,但是没有答案对解决我的问题有任何影响.我尝试过Thread.sleep,以及延迟的可运行.使用处理程序等
我想使用相同的imageview显示帧动画序列(AnimationDrawable),并根据需要更改背景动画.用户输入一系列5个动画,然后可以播放它们(如果我的程序可以工作的话).一旦选择了动画,我将使用一个包含if语句和switch语句的for循环,以选择是否选择了动画并进行播放.
如您所料,这无法正常工作,因为程序会跳过for循环,而实际上只会播放第一个和最后一个动画.这是代码的原理:
for(i=0;i<5;i++){
if(conditions){
view.setBackground(chosenAnimation);
((AnimationDrawable)view.getBackground().start();
}
}
因此,正如我所说,我尝试了Thread.sleep(),但它并没有满足我的需求.我尝试过使用Handler类,并在可运行项上设置了延迟.我已经试过了:
view.postDelayed(new Runnable() {
@Override
public void run() {
//works the same without this line
((AnimationDrawable)view.getBackground()).stop();
((AnimationDrawable)view.getBackground()).start();
}
}, 1000);
除了添加暂停之前,这些操作均不执行任何操作,之前执行的操作与添加此内容之前完全相同.我精心调试了代码,一切正常.动画均已单独测试.
就像我说的那样,已经提出并回答了类似的问题,但我没有想要的结果,程序要等到一个动画完成后才能再次通过for循环.
我想再次声明,这是一系列使用AnimationDrawable和每次相同的imageview的帧动画.提前致谢!
解决方法:
您所有的动画都将以相同的延迟开始,例如,应通过将其乘以i来增加此延迟.您还可以通过编程方式计算每个动画的持续时间,并根据需要增加延迟.
我只是尝试实现您想要的并且没有问题,尽管我的示例使用了3rd party库,但这不是必需的.
package com.example.masktest.app;
import android.animation.Animator;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.concurrent.atomic.AtomicReference;
import static com.dtx12.android_animations_actions.actions.Actions.*;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playAnimation();
}
});
}
private void playAnimation() {
final AnimationDrawable firstDrawable = (AnimationDrawable) ContextCompat.getDrawable(MainActivity.this, R.anim.anim_android);
final AnimationDrawable secondDrawable = (AnimationDrawable) ContextCompat.getDrawable(MainActivity.this, R.anim.anim_android_2);
final AtomicReference<Integer> cpt = new AtomicReference<>(0);
Animator sequence = repeat(6, sequence(run(new Runnable() {
@Override
public void run() {
if (imageView.getDrawable() instanceof AnimationDrawable) {
((AnimationDrawable) imageView.getDrawable()).stop();
}
imageView.setImageDrawable(cpt.get() % 2 == 0 ? secondDrawable : firstDrawable);
((AnimationDrawable) imageView.getDrawable()).start();
cpt.set(cpt.get() + 1);
}
}), delay(countAnimationDuration(secondDrawable))));
play(sequence, imageView);
}
private float countAnimationDuration(AnimationDrawable drawable) {
int duration = 0;
for (int i = 0; i < drawable.getNumberOfFrames(); i++) {
duration += drawable.getDuration(i);
}
return duration / 1000f;
}
}
内容总结
以上是互联网集市为您收集整理的java-按顺序播放帧动画.安卓系统全部内容,希望文章能够帮你解决java-按顺序播放帧动画.安卓系统所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。