我想在另一个动画结束后开始播放动画。我正在使用动画属性,我将对象定义为“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>
答案 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
并检查您的侦听器是否已正确触发。