安卓片段事务自定义动画



我正在尝试实现此处的动画。

Android 3d动画,如Google Now启动器菜单动画

但是,看起来我无法使用对象动画器,因为我使用的是支持库片段。 当我尝试使用上述链接中的代码时,我收到一个错误,指出未知动画:对象动画器。

在添加/删除片段时,如何完成这样的动画,同时仍使用片段支持库?

更新

根据下面DeeV的答案,我已经更新了其余部分的XML动画。

gla_back_come.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
    <scale
        android:fromXScale="1"
        android:toXScale="0"
        android:fromYScale="1"
        android:toYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator" />
</set>

gla_back_gone.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" >
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <scale
        android:fromXScale="12.0"
        android:toXScale="1.0"
        android:fromYScale="12.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

gla_there_come.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500">
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <scale
        android:fromXScale="0.0"
        android:toXScale="1.0"
        android:fromYScale="0.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

gla_there_gone.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" >
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0"/>
    <scale
        android:fromXScale="1.0"
        android:toXScale="12.0"
        android:fromYScale="1.0"
        android:toYScale="12.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

您可以将ObjectAnimator替换为经典动画。 它们可以以大致相同的方式创建。 不要将 xml 文件放在animator资源目录中,而是将它们放在anim资源目录中。 xml 文件中的动画本身具有更具体的名称。 您不是命名属性,而是命名要执行的动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

因此,例如在您发布的答案中,"gla_there_come.xml"将来自:

<set xmlns:android="http://schemas.android.com/apk/res/android" >
  <objectAnimator
    android:duration="500"
    android:propertyName="alpha"
    android:valueFrom="0.0"
    android:valueTo="1.0" />
  <objectAnimator
    android:duration="500"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:propertyName="scaleY"
    android:valueFrom="0"
    android:valueTo="1" />
  <objectAnimator
    android:duration="500"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:propertyName="scaleX"
    android:valueFrom="0"
    android:valueTo="1" />
</set>

对此:

<set xmlns:android="http://schemas.android.com/apk/res/android"
     duration="500">
  <alpha
    android:fromAlpha="0.0"
    android:toAlpha="1.0" />
  <scale
    android:fromXScale="0.0"
    android:toXScale="1.0"
    android:fromYScale="0.0"
    android:toYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>

最新更新