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

Phi*_*oda 21 android android-animation android-fragments page-flipping

我目前正在阅读本教程:

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

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

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

  • 我是否只是在实施.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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

以下是执行它们的代码:

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();
Run Code Online (Sandbox Code Playgroud)

Anu*_*kur 3

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

  • 我导入了库,用对象动画器 .xml 文件替换了我的 .xml 动画,但出现错误:未知的动画名称:对象动画器 (2认同)