Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用AnimatorSet播放多个动画?_Java_Animation_Augmented Reality_Arcore_Sceneform - Fatal编程技术网

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());
    }
}