Java 如何使用AnimatorSet播放多个动画?
我正在使用Java 如何使用AnimatorSet播放多个动画?,java,animation,augmented-reality,arcore,sceneform,Java,Animation,Augmented Reality,Arcore,Sceneform,我正在使用Sceneform创建一个可以播放动画的android应用程序。我正在尝试使用AnimatorSet顺序启动多个动画师。当尝试播放两个动画时,代码可以完美地工作,但是每当我添加第三个动画时,前两个动画播放,然后应用程序崩溃 下面是一段代码: List animatorList=new ArrayList(); AnimationData ad1=JimRenderable.getAnimationData(“Abm_09|A”); Animator a=新模型Animator(ad1,
Sceneform
创建一个可以播放动画的android应用程序。我正在尝试使用AnimatorSet
顺序启动多个动画师。当尝试播放两个动画时,代码可以完美地工作,但是每当我添加第三个动画时,前两个动画播放,然后应用程序崩溃
下面是一段代码:
List animatorList=new ArrayList();
AnimationData ad1=JimRenderable.getAnimationData(“Abm_09|A”);
Animator a=新模型Animator(ad1,JimRenderable);
动画师。添加(a);
AnimationData ad2=JimRenderable.getAnimationData(“Abm_09|B”);
a=新模型动画师(ad2,JimRenderable);
动画师。添加(a);
AnimationData ad3=JimRenderable.getAnimationData(“Abm_09|C”);
a=新模型动画师(ad3,JimRenderable);
动画师。添加(a);
AnimatorSet as=新的AnimatorSet();
as.play(动画师);
as.start();
我怎样才能让它播放多于2个动画
AnimatorSet
公共类扩展了Animator
类,它提供了一种将动画分组在一起的机制,以便它们彼此相关地运行。您可以将动画设置为同时播放,顺序播放,或在指定延迟后播放
下面是您的代码的外观:
在此代码中,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);
动画侦听器
。他们可以在动画持续时间内收听重要事件。下面是它的代码:
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());
}
}
希望这有帮助。谢谢您的回复。我尝试使用.play()和.with()/after,但同样的问题不断发生。两个动画按顺序播放,效果很好。但每当我添加第三个动画时,程序就会播放前两个动画,然后崩溃。尽量不要使用数组。将每个剪辑作为单独的元素使用。尝试了。还是一样的结果。我制作了3个动画对象a1、a2、a3。然后我使用:as.play(a1,a2,a3);播放a1和a2后程序崩溃。我还尝试使用:as.play(a1).before(a2);as.play(a2).在(a3)之前;结果还是一样。我似乎找不到问题所在。两个动画如何播放没有什么意义,但第三个动画会导致应用程序崩溃。我认为这不是AnimatorSet()的错。有个错误。您需要以某种方式调试它。
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());
}
}