我正在使用Sceneform
创建一个播放动画的android应用。我正在尝试使用AnimatorSet
顺序启动多个Animator。尝试播放两个动画时,代码可以完美运行,但是每当我添加第三个动画时,前两个动画就会播放,然后应用崩溃。
下面是一段代码:
List<Animator> animatorList = new ArrayList<Animator>();
AnimationData ad1 = JimRenderable.getAnimationData("Abm_09|A");
Animator a = new ModelAnimator(ad1, JimRenderable);
animatorList.add(a);
AnimationData ad2 = JimRenderable.getAnimationData("Abm_09|B");
a = new ModelAnimator(ad2, JimRenderable);
animatorList.add(a);
AnimationData ad3 = JimRenderable.getAnimationData("Abm_09|C");
a = new ModelAnimator(ad3, JimRenderable);
animatorList.add(a);
AnimatorSet as= new AnimatorSet();
as.playSequentially(animatorList);
as.start();
如何让它播放不止2个动画?
答案 0 :(得分:1)
AnimatorSet
公共类(扩展了Animator
类)提供了一种将动画分组在一起的机制,使它们彼此相对运行。您可以设置动画在指定的延迟时间后同时,顺序或播放。
这是您的代码的外观:
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).before(squashAnim1);
// THESE FOUR ANIMATIONS PLAY SIMULTANEOUSLY
bouncer.play(squashAnim1).with(squashAnim2);
bouncer.play(squashAnim1).with(stretchAnim1);
bouncer.play(squashAnim1).with(stretchAnim2);
bouncer.play(bounceBackAnim).after(stretchAnim2);
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();
在此代码中,
squashAnim1
剪辑与squashAnim2
,stretchAnim1
和stretchAnim2
同时播放。
这个示例说明了它的工作原理:我们设置了一个AnimatorSet
进行播放:
anim1
和anim2
同时anim3
在anim2
完成后播放,和anim4
在anim3
完成时播放:
AnimatorSet clips = new AnimatorSet();
clips.play(anim1).with(anim2);
clips.play(anim2).before(anim3);
clips.play(anim4).after(anim3);
此外,您可以使用Animation listeners
。他们可以在动画期间收听重要事件。这是一个看起来像这样的代码:
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
fadeAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
balls.remove(((ObjectAnimator)animation).getTarget());
}
}
希望这会有所帮助。