android.support.v4.Fragment上的3D翻转动画

时间:2013-08-27 13:52:30

标签: android android-fragments android-animation page-flipping

我目前正在阅读本教程:

  

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

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

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

  • 我是否只是在实施.xml动画时犯了错误?
  • 或者没有对象动画师可以进行3D翻转动画吗?
  • 或者是否无法通过支持进行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();

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

谢谢大家的帮助。

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

我做了什么:

  • 我下载了这个库:https://github.com/kedzie/Support_v4_NineOldAndroids(这是NineOldAndroids的支持库)
  • 将其导入我的工作区
  • 下载NineOldAndroids库并将其导入我的工作区
  • 将NineOldAndroids库导入support-v4库
  • 将support-v4-nineoldandroids库导入我的项目
  • Filp-Animation

答案 2 :(得分:0)

如果你不支持api <3

以下

使用与https://stuff.mit.edu/afs/sipb/project/android/docs/training/animation/cardflip.html

中给出的代码相同的代码

刚刚将flipCard方法调整为:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="date" style="width: 100%; height: 10%;background:#1d69b4 ">
</div>