android - 用小的缩放动画 "rebound"

标签 android animation layout scale android-view

我正在尝试使用 XML Animations将 View 从 0% 大小放大到 150% 大小(比“实际大小”大 50%)。然后从 150% 大小缩小到 100% 的“实际大小”。其 Intent 是有点“反弹”效果,即 View 将从无到有地变大,然后“反弹”或“弹回”到适当的大小。

这是一张图片,说明了我想要完成的事情的时间表。

Timeline of desired Animations

我正在使用这个 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%。

我已经在每个比例动画和集合本身上尝试了我能想到的 fillBeforefillAfterfillEnabled 的所有组合,但到目前为止,我一直无法找到这些设置的组合,使其按照我的预期运行。

我找到了 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/

相关文章:

android - onPostExecute 在异步任务的 doInBackground 之前执行

java - 使android listview布局可滚动

javascript - jQuery css 动画可见性

javascript - 在 jquery 中编写一个全局动画队列

javascript - 为什么我需要 cancelAnimationFrame()

java - 必须从工作线程调用publishProgress方法,当前推断的线程是主线程

android - 在 LaTeX 中包含 Android 代码的最简单方法是什么?

java - Android 圆角布局与填充平铺图像

android - 当我创建一个新的 android 项目时出现错误

android - 为什么框架布局没有正确绘制 z 索引?