3

FragmentManagerクライアントのリクエストで、Android の/FragmentTransactionフレームワークとsetCustomAnimations()遷移アニメーションを実現するメソッドを使用して、「iOS UINavigationController スタイル」の右から左へのプッシュ、左から右へのポップ アニメーションをエミュレートしようとしています。

バックスタックからフラグメントをポップする場合を除いて、すべてが正常に機能していますonDestroyView()。ポップされるフラグメントですぐに呼び出され、フラグメントの子ビューがレイアウトからすぐに削除されます。

これは、前のフラグメントがアニメーション表示を終了する前に、黒のフラッシュ (ポップされたフラグメントの背景色) があることを意味します。これはちょっと見苦しいです。

遷移アニメーションが完了するまで、ポップされたフラグメントにそのビュー階層を保持させる方法についてのアイデアはありますか?

4

1 に答える 1

0

私は同じ問題に遭遇しました。

アニメーションの開始時に ondestoryview() が呼び出され、終了時に ondestory() が呼び出されることがわかりました。

そこで、いくつかのコードを ondestoryview() から ondestory() に移動しました。

別の解決策: onDestoryView() に次のコードを追加します。

View v = getView();
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getWidth(), v.getHeight());
v.draw(c);
BitmapDrawable bd = new BitmapDrawable(ProviderFactory.getContext().getResources(), b);
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    getActivity().findViewById(R.id.fragment_container).setBackgroundDrawable(bd);
} else {
    getActivity().findViewById(R.id.fragment_container).setBackground(bd);
}
于 2014-10-13T09:28:01.780 に答える