动画片段之间的过渡

要为片段之间的过渡设置动画,或者为显示或隐藏片段的过程设置动画,可以使用 FragmentManager 创建一个 FragmentTransaction

对于单个 FragmentTransaction,有两种不同的方式来执行动画:你可以使用标准动画,也可以提供自己的自定义动画。

通过调用 FragmentTransaction.setTransition(int transit) 并使用 FragmentTransaction 类中可用的预定义常量之一来指定标准动画。在撰写本文时,这些常量是:

FragmentTransaction.TRANSIT_NONE
FragmentTransaction.TRANSIT_FRAGMENT_OPEN
FragmentTransaction.TRANSIT_FRAGMENT_CLOSE
FragmentTransaction.TRANSIT_FRAGMENT_FADE

完整的事务可能如下所示:

getSupportFragmentManager()
    .beginTransaction()
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
    .replace(R.id.contents, new MyFragment(), "MyFragmentTag")
    .commit();

通过调用 FragmentTransaction.setCustomAnimations(int enter, int exit)FragmentTransaction.setCustomAnimations(int enter, int exit, int popEnter, int popExit) 指定自定义动画。

enterexit 动画将播放 FragmentTransactions,不涉及从后栈中弹出碎片。从背堆中弹出一个片段时,将播放 popEnterpopExit 动画。

下面的代码显示了如何通过滑出一个片段并将另一个片段滑动到其中来替换片段。

getSupportFragmentManager()
    .beginTransaction()
    .setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right)
    .replace(R.id.contents, new MyFragment(), "MyFragmentTag")
    .commit();

XML 动画定义将使用 objectAnimator 标记。 slide_in_left.xml 的示例可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x" 
    android:valueType="floatType"
    android:valueFrom="-1280"
    android:valueTo="0" 
    android:duration="500"/>
</set>