Loop AnimatorSet

Yar*_*lyk 7 animation android

我制作了一个三个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>
Run Code Online (Sandbox Code Playgroud)

但是如果我将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();
    }
});
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*ian 6

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

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

所有信用均归原作者所有.


Yar*_*lyk 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>
Run Code Online (Sandbox Code Playgroud)