动画Listerner没有回应Animatorset

时间:2015-08-17 23:41:12

标签: java android

我想在另一个动画结束后开始播放动画。我正在使用动画属性,我将对象定义为“AnimatorSet”。问题是第一个动画开始没有问题,但第二个动画从未开始。

public void moveGround() {

        ImageView ground = (ImageView) findViewById(R.id.ground);
        ImageView ground2 = (ImageView) findViewById(R.id.ground2);
        final AnimatorSet moveGround = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.ground_move);
        final Animator moveGround2 = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.ground_move2);
        moveGround2.setTarget(ground2);
        moveGround.setTarget(ground);
        moveGround.start();

        moveGround.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                moveGround2.start();
            }
        });


    }
编辑:我也尝试在动画侦听器结束后启动第一个动画:结果相同。

编辑2:XML文件

ground_move.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:ordering="sequentially" >

    <objectAnimator
        android:duration="2000"
        android:propertyName="x"
        android:repeatCount="infinite"
        android:repeatMode="restart"
        android:valueFrom="2000"
        android:valueTo="-2000"
        android:valueType="floatType"
        />

</set>

ground_move2.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:ordering="sequentially" >

    <objectAnimator
        android:duration="2000"
        android:propertyName="x"
        android:repeatCount="infinite"
        android:repeatMode="restart"
        android:valueFrom="2000"
        android:valueTo="-2000"
        android:valueType="floatType" />

</set>

1 个答案:

答案 0 :(得分:1)

尝试:

moveGround.setTarget(ground);
moveGround.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        moveGround2.start();
    }
});
moveGround.start();

(注意我们如何首先添加侦听器,然后启动动画)如果这不起作用,请尝试设置一个有限的时间:moveGround.setDuration(sometime);然后再启动它以检查是否有效地完成动画。

<强>更新

添加xml文件后,我看到您有android:repeatCount="infinite"android:repeatMode="restart",尝试删除它们或设置android:repeatCount=0并检查您的侦听器是否已正确触发。