【发布时间】:2021-04-07 19:07:03
【问题描述】:
我正在制作一个超级简单的摇动动画,将几个旋转动画放在一起。我遇到了一个问题,动画的重复部分似乎忽略了持续时间,只是跳回该位置,而不是使用持续时间向上旋转。
我目前的设置方式:
-
第一个动画 - 将一半的旋转距离移动到一个新的起点。添加这个是为了在动画开始时不会出现难看的跳跃。
-
第二部动画 - 大部分。基本上从最大范围来回摇摆。旋转有一个设定的持续时间,当动画开始播放时看起来很棒,但当它重复时它会跳回来。
-
第三个动画 - 结束,平滑地将动画移回起始位置。
代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<rotate
android:duration="240"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="2"/>
<rotate
android:startOffset="240"
android:duration="480"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="reverse"
android:repeatCount="5"
android:toDegrees="-4"/>
<rotate
android:startOffset="720"
android:duration="240"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="2"/>
</set>
我一直在尝试的另一种方法是在 xml 中只包含 1 个完整的动画循环,然后找到一种循环它的方法,或者连续运行 x 次。无法让它真正正确循环。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<rotate
android:duration="240"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="2"/>
<rotate
android:startOffset="240"
android:duration="480"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="reverse"
android:repeatCount="0"
android:toDegrees="-4"/>
<rotate
android:startOffset="720"
android:duration="240"
android:fromDegrees="0"
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="2"/>
</set>
【问题讨论】:
标签: android animation android-animation android-xml