0

私のアプリケーションでは、次のことを行っています (サポート ライブラリを使用)。

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_inとのR.anim.fade_out持続時間は 200 ミリ秒未満です。

初めてフラグメントを変更すると、アニメーションがまったく表示されません。XML の膨張が原因だと思います。XML の膨張にかかる時間は、アニメーションの長さよりも長くなります。2 回目以降は、アニメーションが正しく表示されます。

XML アニメーションをプリロードする方法はありますか?

4

2 に答える 2

0

私はそれを自分で見つけました。onCreateAnimation()でメソッドをオーバーライドする必要がありますFragment。これが私がやった方法です:

@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);

mEnterAnimationandmExitAnimationフィールドは static と宣言されていることに注意してください。経由でアニメーションをロードするAnimationUtils.loadAnimation()には、Context. は、シングルトンContextを介して取得されます。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;
}
于 2012-10-12T12:43:54.510 に答える
0

AnimationUtilsを見ることができます。より正確には

loadAnimation(Context context, int id)

それはあなたが必要とするものでなければなりません。また、Android にはフェードインとフェードアウトのアニメーション android.R.anim.fade_in と android.R.anim.fade_out が既にあります。これらを使用してみてください。

于 2012-10-10T12:47:42.780 に答える