【问题标题】:Android Fragment Transaction custom AnimationAndroid Fragment Transaction 自定义动画
【发布时间】:2016-07-19 19:09:19
【问题描述】:

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

Android 3d animation like Google Now Launcher Menu Animation

但是,我似乎无法使用 objectAnimator,因为我正在使用支持库片段。当我尝试使用上述链接中的代码时,我收到一条错误消息,指出 Unknown animation: objectAnimator.

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

更新

根据下面 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>

【问题讨论】:

  • 我已经有一段时间没有使用基本动画了,但我认为插值器需要从“@android:anim/”文件夹中获取,并且它们都使用“_interpolator”进行后置修复”。它们本质上是相同的东西,但它们可能不存在于年轻设备的“@android:interpolator/”位置。我用accelarate_decelerate_interpolator 编辑了我的答案。
  • @DeeV - 谢谢!我将更新我上面的 XML 以匹配。
  • @DeeV - 你能检查我更新的 gla_back_gone 和 gla_back_come 动画的 XML 吗?他们似乎没有像视频示例那样做。我想我可能有问题
  • 我还没有验证动画是如何工作的。假设您发布的答案中的动画是正确的。我只是说你如何使用带有支持片段的动画。
  • @DeeV - 所以我转换它们的方式看起来正确吗?这就是我要问的。不管原始动画是否正确,我使用旧动画的转换是否良好?

标签: android android-animation


【解决方案1】:

您可以将ObjectAnimator 替换为经典的Animation。它们可以以大致相同的方式创建。不要将 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>

【讨论】:

  • 谢谢!如果您有时间并且可以为其他人添加转换,那就太好了!如果没有,不用担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 2012-08-12
  • 1970-01-01
相关资源
最近更新 更多