我制作了一个三个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编写我自己的动画)?
在迫切需要这个功能的情况下,竟然已经找到了一个解决方案.
http://www.jefflinwood.com/2013/04/repeating-android-animations-with-animatorset/
所有信用均归原作者所有.
这种特殊情况的解决方法是创建一个 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)
| 归档时间: |
|
| 查看次数: |
14278 次 |
| 最近记录: |