0

次のように、アクティビティ A とアクティビティ B の間の共有要素の遷移を行うためのアクティビティ遷移があることを理解しています。

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
    Pair.create(view1, "agreedName1"),
    Pair.create(view2, "agreedName2"));

同じアクティビティ内にあるフラグメントのフラグメント遷移もあります。しかし、Activity A の Fragment ビューと Activity B の間で共有要素を移行する方法はありますか?

私のアクティビティ A には、アクティビティ B のビューに移行したいビューを持つフラグメントを含む ViewPager があります。したがって、アクティビティ B に移行したいビューは、実際にはアクティビティ A のレイアウトではなく、アクティビティ A のフラグメント レイアウトにあります。

これを機能させる方法はありますか?

4

2 に答える 2

5

はい、フラグメントはそれ自体でアクティビティ トランジションに問題を引き起こすことはありません。主な問題は、フラグメントが後でコンテンツをロードする傾向があり、移行システムが利用可能なものについて混乱することです。

遷移がある場合、ビューは実際にはあるアクティビティから別のアクティビティに移動しません。場所とサイズ (およびビットマップ) のスナップショットが作成され、その情報がアクティビティ B に転送されます。アクティビティ B の対応するビューは、その場所とサイズから最終的な場所とサイズに移行されます。ビットマップは通常は使用されませんが、クロスフェードなどで必要な場合に備えてあります。

共有要素がアクティビティ A のフラグメントにある場合、出力トランジションは正常です。つまり、ビューが存在し、適切に配置されています。唯一の潜在的な問題は、戻り遷移です。アクティビティ B が閉じると、アクティビティ A の再起動が必要になる可能性があります (メモリ不足、向きの変更など)。その場合、フラグメントを再作成し、ビューを適切に配置する必要があります。でonActivityReenterを呼び出しpostponeEnterTransition、フラグメントがロードされてレイアウトが完了したら、 を呼び出しますstartPostponedEnterTransition。その後、アクティビティ B は共有要素の最終的な位置とサイズを認識し、アニメーションを開始できるようにします。

アクティビティ B がフラグメント内に共有要素を持っている場合、逆の場合も同じです。フラグメントが読み込まれ、レイアウトがアクティビティ B で完了するまで、onCreate での入力トランジションを延期する必要があります。

于 2016-03-15T15:04:57.510 に答える
0

参考になるかわかりませんが、こんなことをしました。

ActivityOptionsCompat options = ActivityOptionsCompat
                        .makeSceneTransitionAnimation(getActivity(),
                                (View) viewHolder.clickme, "zoom");
                getActivity().startActivity(i, options.toBundle());
                getActivity().overridePendingTransition(R.anim.fadein,
                        R.anim.fadeout);

何らかの形でお役に立てば幸いです。

于 2016-03-15T05:34:22.300 に答える