Loop AnimatorSet

时间:2013-07-05 15:39:28

标签: android animation

我制作了一个三个ObjectAnimator的AnimatorSet,我想重复一遍。

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="0"
        android:valueTo="5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="600"
        android:valueFrom="5"
        android:valueTo="-5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="-5"
        android:valueTo="0"
        android:valueType="floatType"/>

</set>

但是如果我将CycleInterpolator设置为AnimatorSet,因为动画师将会连续启动

  

public void setInterpolator(TimeInterpolator interpolator)   在API级别11中添加

     

为此AnimatorSet的所有当前子动画设置TimeInterpolator。

所以我尝试通过设置一个监听器来重新启动AnimatorSet来循环,但它停止了几毫秒,并且重启AnimatorSet的效果很明显。

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

我可以做什么来循环它(除了构建一个巨大的ObjectAnimator列表或使用Thread和Handler编写我自己的动画)?

4 个答案:

答案 0 :(得分:6)

在迫切需要这个功能的情况下,已经找到了一些解决方案。

http://www.jefflinwood.com/2013/04/repeating-android-animations-with-animatorset/

所有赠送金额均归原作者所有。

mAnimationSet.addListener(new AnimatorListenerAdapter() {

@Override
public void onAnimationEnd(Animator animation) {
    super.onAnimationEnd(animation);
    mAnimationSet.start();
}

});
mAnimationSet.start();

答案 1 :(得分:4)

这个特殊情况的解决方法是创建一个AnimatorSet,第一个项目旋转一半,第二个项目旋转

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">

    <objectAnimator
        android:propertyName="rotation"
        android:duration="150"
        android:valueFrom="0"
        android:valueTo="-5"
        android:valueType="floatType"/>

    <objectAnimator
        android:propertyName="rotation"
        android:duration="300"
        android:valueFrom="-5"
        android:valueTo="5"
        android:repeatMode="reverse"
        android:repeatCount="infinite"
        android:valueType="floatType"/>

</set>

答案 2 :(得分:-1)

请它重复一遍:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:ordering="sequentially"
   android:repeatMode="reverse"
   android:repeatCount="infinite">

=)

count也可以是定义的数字。

答案 3 :(得分:-1)