21

我目前正在阅读本教程:

http://developer.android.com/training/animation/cardflip.html

关于片段的翻转动画。不幸的是,object-animator仅适用于 android.app.Fragment,不支持 Fragment。

我尝试使用缩放和旋转动画重建 .xml 动画。但是现在动画只是没有执行,并且在我在动画 .xml 文件中设置的时间过去之后,另一个 Fragment 出现了,而不是翻转。

  • 我只是在实现 .xml 动画时犯了一个错误吗?
  • 或者没有对象动画师就无法制作 3D 翻转动画?
  • 还是不能用支持 Fragment 做 3D 翻转动画?

这是我的 .xml 动画:flip_left_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >

  <!-- Before rotating, immediately set the alpha to 0. -->
 <alpha
    android:valueFrom="1.0"
    android:valueTo="0.0"
    android:propertyName="alpha"
    android:duration="0" />

 <!-- Rotate. -->
 <rotate
    android:valueFrom="-180"
    android:valueTo="0"
    android:propertyName="rotationY"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:duration="800"/>

<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<alpha
    android:valueFrom="0.0"
    android:valueTo="1.0"
    android:startOffset="400"
    android:duration="1" /> 
</set>

flip_left_out.xml

 <set xmlns:android="http://schemas.android.com/apk/res/android" >

   <!-- Rotate. -->
   <rotate
    android:duration="800"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:propertyName="rotationY"
    android:valueFrom="0"
    android:valueTo="180" />

<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<alpha
    android:duration="1"
    android:propertyName="alpha"
    android:startOffset="400"
    android:valueFrom="1.0"
    android:valueTo="0.0" />

 </set>

flip_right_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Before rotating, immediately set the alpha to 0. -->
<alpha
    android:duration="0"
    android:propertyName="alpha"
    android:valueFrom="1.0"
    android:valueTo="0.0" />

<!-- Rotate. -->
<rotate
    android:duration="800"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:propertyName="rotationY"
    android:valueFrom="180"
    android:valueTo="0" />

<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<alpha
    android:duration="1"
    android:propertyName="alpha"
    android:startOffset="400"
    android:valueFrom="0.0"
    android:valueTo="1.0" />

  </set>

flip_right_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Rotate. -->
<rotate
    android:duration="800"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:propertyName="rotationY"
    android:valueFrom="0"
    android:valueTo="-180" />

<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<alpha
    android:duration="1"
    android:propertyName="alpha"
    android:startOffset="400"
    android:valueFrom="1.0"
    android:valueTo="0.0" />

 </set>

这是执行它们的代码:

FragmentTransaction trans = getActivity().getSupportFragmentManager().beginTransaction();

trans.setCustomAnimations(R.anim.flip_right_in, R.anim.flip_right_out, 
                           R.anim.flip_left_in, R.anim.flip_left_out);
trans.addToBackStack(null);

trans.replace(R.id.content_frame, new MyFragment()).commit();
4

3 回答 3

3

您可以使用NineOldAndroids。它将 Honeycomb (Android 3.0) 动画 API 一直向后移植到 Android 1.0。您将获得 ObjectAnimator、ValueAnimator 和所有其他好东西。

于 2013-08-27T13:59:27.777 回答
2

谢谢大家的帮助。

我设法解决了我的问题。该解决方案与NineOldAndroids和另一个支持 NineOldAndroids 的 support-v4 库有关。

我做了什么:

  • 我下载了这个库:https ://github.com/kedzie/Support_v4_NineOldAndroids (这是 NineOldAndroids 的支持库)
  • 将其导入我的工作区
  • 下载 NineOldAndroids 库并将其导入我的工作区
  • 将 NineOldAndroids 库导入 support-v4 库
  • 将 support-v4-nineoldandroids 库导入我的项目
  • Filp动画制作了吗
于 2013-08-29T12:43:39.683 回答
1

如果您不支持低于 api<3

使用与以下相同的代码:https ://stuff.mit.edu/afs/sipb/project/android/docs/training/animation/cardflip.html

刚刚将 FlipCard 方法调整为:

private void flipCard() {
if (mShowingBack) {
    mShowingBack = false;
    FragmentTransaction trans = getActivity().getFragmentManager().beginTransaction();
    trans.setCustomAnimations(R.animator.card_flip_right_in,
            R.animator.card_flip_right_out,
            R.animator.card_flip_left_in,
            R.animator.card_flip_left_out)
         .replace(R.id.memberCardContainer, new CardFrontFragment())
         .commit();
    return;
}

// Flip to the back.
mShowingBack = true;
FragmentTransaction trans = getActivity().getFragmentManager().beginTransaction();
trans.setCustomAnimations(R.animator.card_flip_right_in,
        R.animator.card_flip_right_out,
        R.animator.card_flip_left_in,
        R.animator.card_flip_left_out)
     .replace(R.id.memberCardContainer, new CardBackFragment())
     .commit();
}
于 2017-06-09T06:55:37.217 回答