8

我制作了一个包含三个 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 因为 Animators 将按顺序启动

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

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

所以我尝试通过设置监听器重新启动AnimatorSet来循环,但是它会停止几毫秒并且重新启动AnimatorSet的效果是显而易见的。

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

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

4

4 回答 4

7

也迫切需要此功能,结果有人已经找到了解决方案。

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();
于 2014-04-16T08:11:59.373 回答
5

这种特殊情况的解决方法是创建一个 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>
于 2013-07-05T16:05:57.127 回答
-1

您需要为 AnimationSet 设置重复模式,请参见:

http://developer.android.com/reference/android/view/animation/Animation.html#attr_android:repeatMode

于 2013-07-05T15:45:59.683 回答
-2

只是要求它重复:

<?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 也可以是一个定义的数字。

于 2013-07-05T15:45:22.973 回答