我正在尝试使用 XML Animations将 View 从 0% 大小放大到 150% 大小(比“实际大小”大 50%)。然后从 150% 大小缩小到 100% 的“实际大小”。其 Intent 是有点“反弹”效果,即 View 将从无到有地变大,然后“反弹”或“弹回”到适当的大小。
这是一张图片,说明了我想要完成的事情的时间表。
我正在使用这个 XML 动画代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
>
<scale android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1.5"
android:toYScale="1.5"
android:duration="200"
android:pivotX="50%"
android:pivotY="100%"
android:fillAfter="false"
/>
<scale android:fromXScale="1.5"
android:fromYScale="1.5"
android:toXScale="1.0"
android:toYScale="1.0"
android:duration="100"
android:pivotX="50%"
android:pivotY="100%"
android:startOffset="200"
/>
</set>
我遇到的问题是,在第一个缩放动画完成后, View 正确地为 150% 大小,但是当它运行第二个动画时,它相对于我们完成第一个动画的大小(150 %) 作为“真实大小”的 100%,或 1.0。
因此,当第二个动画运行而不是我的 View 从 150% 缩小到 100% 的实际大小时,它实际上是从 150% (225%) 的 150% 缩小到 150%。这意味着在动画结束时 View 仍然太大,在我的例子中是实际大小的 150%。
是否有某种方法可以指示第二个动画或动画集忽略第一个动画的结束值,而只使用 View 的“真实”大小,以便代码更按字面解释并从中缩放实际尺寸的 150% 缩小到实际尺寸的 100%。
我已经在每个比例动画和集合本身上尝试了我能想到的 fillBefore
、fillAfter
和 fillEnabled
的所有组合,但到目前为止,我一直无法找到这些设置的组合,使其按照我的预期运行。
我找到了 This Article这似乎与我的情况有关,这促使我测试了各种 fill
属性的更多组合。但是到目前为止,我仍然无法获得我希望的结果。
最佳答案
不应该为动画工作使用一个简单的插值器,我的意思是您无法通过准确的时间对动画进行很好的控制,但是像这样的东西应该可以在没有那么多工作的情况下实现类似的技巧:
<scale android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1.0"
android:toYScale="1.0"
android:duration="300"
android:pivotX="50%"
android:pivotY="100%"
android:fillAfter="true"
android:interpolator="@android:anim/overshoot_interpolator"
/>
关于android - 用小的缩放动画 "rebound",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327264/