動畫片段之間的過渡

要為片段之間的過渡設定動畫,或者為顯示或隱藏片段的過程設定動畫,可以使用 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>