Android 是否可以使用并发插值器?

标签 android animation interpolation

我有一组两个动画,两个动画使用过冲插值器一起运行

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/overshoot_interpolator" >

    <translate
        android:duration="6000"
        android:fromXDelta="100%" android:toXDelta="0%" />

    <scale
        android:duration="6000"
        android:fromXScale="1.0" android:toXScale="0.6"
        android:pivotX="0"
        android:fromYScale="1.0" android:toYScale="1.0"
        android:repeatCount="1"
        android:repeatMode="reverse" />
</set>

我希望translate 动画过冲,scale 动画加速。
我尝试这样做,但它不起作用:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:interpolator="@android:anim/overshoot_interpolator"
        android:duration="6000"
        android:fromXDelta="100%" android:toXDelta="0%" />

    <scale
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="6000"
        android:fromXScale="1.0" android:toXScale="0.6"
        android:pivotX="0"
        android:fromYScale="1.0" android:toYScale="1.0"
        android:repeatCount="1"
        android:repeatMode="reverse" />
</set>

对于在单个对象上执行的所有动画,似乎在给定时间只能激活一个插值器。

最佳答案

这只是猜测。我记得其中一个 AnimationSet的构造函数可以接受一个参数,即 shareInterpolator

从参数的名称来看,在您的情况下,这可能应该设置为 false。现在,它应该使用默认的“值”。此默认值很可能是true,因为您的动画没有不同的插值器,尽管您为每个插值器指定了不同的插值器。

确认一下,AnimationSet 的源代码中有以下行为 shareInterpolator 赋值(来自 xml):

setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, 
        a.getBoolean(com.android.internal.R.styleable.AnimationSet_shareInterpolator
             , true));

这显然意味着如果未指定此 bool 值,它将默认为 true。


解决方案

要解决您的问题,我想您应该使用此“R.styleable.AnimationSet_shareInterpolator”来指定它。这仅仅意味着添加 android:shareInterpolator="false" 给你的 <set> 元素

关于Android 是否可以使用并发插值器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311290/

相关文章:

android - 在应用程序订阅中执行 android 的最低操作系统是什么?

android - 基于不同硬件平台的安卓设备市场份额

屏幕外的 Android Animate View 无法正常工作

python - 具有不规则间隔样本的 2D 彩色图 (matplotlib.mlab.griddata)

python - 为 x 的两个值插值一个峰值 - Python

android - sigemptyset() NDK 不满足链接错误 dlopen()

Android 搜索栏被剪掉的拇指

ios - 带有自定义 drawRect 和 animateWithDuration 的 UIView

animation - Snap SVG - 对路径元素进行动画处理

kernel - 使用 OpenCL 内核的最近邻插值代码