8

スライドアニメーションでフラグメントを切り替えようとしています

このコードの使用:

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();        
SearchPanelFragment existingFragment = (SearchPanelFragment) manager.findFragmentByTag(SearchPanelFragment.FRAGMENT_NAME);        
transaction.setCustomAnimations(R.xml.slide_down_search_panel, R.xml.slide_up_search_panel);        
if (existingFragment != null) {
    if (existingFragment.isVisible())
        transaction.remove(existingFragment);       
} else {
    transaction.add(R.id.top_panel_fragment, new SearchPanelFragment(this), SearchPanelFragment.FRAGMENT_NAME);
}

    transaction.commit();

これまでのところ、アニメーションを開始するのtransaction.addはいつですか?アニメーションを終了するのはいつですか?使用しているときにしか取得できませんでしたtransaction.replaceが、古いフラグメントを同じ新しいフラグメントと交換するだけでした。必要なのは、終了アニメーションを再生して非表示にする/削除する/切り離す/必要なものをすべて非表示にすることです。

編集:私は非表示、削除、および切り離しを試みました。私が何をしても、アニメーションは再生されません。追加、表示、置換時にのみ再生されます

編集2:2番目のアニメーションに問題がある可能性があります。それらの両方を見てください。最初のものは下にスライドし、うまく機能しているようです。

下にスライド

<translate
    android:duration="500"
    android:fromXDelta="0%"
    android:fromYDelta="-100%"
    android:toXDelta="0%"
    android:toYDelta="0%" />

上にスライドします

<translate
    android:duration="700"
    android:fromXDelta="0%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="-100%" />
4

2 に答える 2

9

あなたは実際に間違った機能を使用しています。

のドキュメントによるとsetCustomAnimations(int enter, int exit)

このトランザクションで出入りするフラグメントに対して実行する特定のアニメーション リソースを設定します。これらのアニメーションは、バック スタックをポップするときに再生されません。

代わりに、次を使用する必要がありますsetCustomAnimations (int enter, int exit, int popEnter, int popExit)

このトランザクションで出入りするフラグメントに対して実行する特定のアニメーション リソースを設定します。のアニメーションは、特にバック スタックをポップするときに開始/終了操作のために再生されます。popEnterpopExit

于 2013-03-29T00:13:00.453 に答える
8

編集

このバグは 2013 年 6 月 7日に修正されました。リビジョン 18 以降、バグは修正されていると思います。

最新のサポート ライブラリ リビジョンを使用している場合、これはもはや問題ではありません。

古い回答

http://code.google.com/p/android/issues/detail?id=32405サポート ライブラリにバグがあります。動作させる唯一の方法は、サポート ライブラリ ソースを入手して自分で再コンパイルすることです。

于 2012-12-21T13:18:00.400 に答える