【问题标题】:Android reverse animation does not respect durationAndroid反向动画不尊重持续时间
【发布时间】:2021-04-07 19:07:03
【问题描述】:

我正在制作一个超级简单的摇动动画,将几个旋转动画放在一起。我遇到了一个问题,动画的重复部分似乎忽略了持续时间,只是跳回该位置,而不是使用持续时间向上旋转。

我目前的设置方式:

  1. 第一个动画 - 将一半的旋转距离移动到一个新的起点。添加这个是为了在动画开始时不会出现难看的跳跃。

  2. 第二部动画 - 大部分。基本上从最大范围来回摇摆。旋转有一个设定的持续时间,当动画开始播放时看起来很棒,但当它重复时它会跳回来。

  3. 第三个动画 - 结束,平滑地将动画移回起始位置。

代码

    <?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


    【解决方案1】:

    看起来这可能是 Android 上的错误?它似乎与 ObjectAnimator 一起正常工作,如下所示。此代码有效并尊重反向的持续时间并重复。

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:ordering="sequentially">
    
        <objectAnimator
            android:duration="240"
            android:propertyName="rotation"
            android:valueFrom="0"
            android:valueTo="2"/>
        <objectAnimator
            android:duration="480"
            android:propertyName="rotation"
            android:valueFrom="2"
            android:valueTo="-2"
            android:repeatMode="reverse"
            android:repeatCount="4"/>
        <objectAnimator
            android:duration="240"
            android:propertyName="rotation"
            android:valueFrom="-2"
            android:valueTo="0"/>
    </set>
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2012-12-12
      • 2018-06-15
      • 2016-02-28
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多