2012-10-10 21 views
0

在我的應用我做了以下(使用支持庫):預緊XML動畫片段中的交易

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction transaction = fragmentManager.beginTransaction(); 
transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); 
transaction.replace(R.id.fragment_container, fragment); 
transaction.commit(); 

的動畫R.anim.fade_inR.anim.fade_out具有小於200毫秒的持續時間。

我第一次改變片段,動畫不顯示在所有。我認爲這是由於XML膨脹引起的:膨脹XML所花的時間比動畫的持續時間要長。從第二次開始,動畫顯示正確。

有沒有辦法將其預加載XML動畫?

回答

0

我自己找到了。您必須覆蓋Fragment中的onCreateAnimation()方法。這是我做的:

@Override 
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { 
    if (enter) 
     return mEnterAnimation; 
    else 
     return mExitAnimation; 
} 

private static final Animation mEnterAnimation = AnimationUtils 
    .loadAnimation(MyApplication.getInstance().getBaseContext(), 
    R.anim.frag_fade_in); 

private static final Animation mExitAnimation = AnimationUtils 
    .loadAnimation(MyApplication.getInstance().getBaseContext(), 
    R.anim.frag_fade_out); 

注意,mEnterAnimationmExitAnimation字段被聲明爲static。要通過AnimationUtils.loadAnimation()載入動畫,您需要一個ContextContext是通過MyApplication單身獲得的。要創建這樣一個單隻寫到您的AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.app" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <application 
     android:name=".MyApplication" 
     android:label="@string/app_name" > 

     <!-- Insert your activities here --> 

    </application> 

</manifest> 

然後創建該類com.example.app.MyApplication作爲單:

public class MyApplication extends Application { 
    public static MyApplication getInstance() { 
     return mInstance; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mInstance = this; 
    } 

    private static MyApplication mInstance; 
} 
0

你可以看看AnimationUtils和更精確的

loadAnimation(Context context, int id) 

它應該是你所需要的。 另外android已經有淡入淡出和淡出android.R.anim.fade_in和android.R.anim.fade_out的動畫,你應該嘗試使用這些,也許它們被證明更有效率。

+0

它不工作。我知道內置的'R.anim.fade_in'和'R.anim.fad_out',但我需要更快的動畫。不管怎樣,謝謝你。 – mneri