RecyclerView で選択したアイテムから新しいフラグメントに 2 つの単純なビューをアニメーション化しようとしています。あるアクティビティから別のアクティビティに共有要素をアニメーション化する例をたくさん見てきましたが、同じアクティビティ内であるフラグメントから別のフラグメントに共有要素をアニメーション化する例はほとんどありません。それはほとんど動作します。
これが私の構造です。
アクティビティ
-- RecyclerView を使用したフルスクリーン Fragment1
-- フルスクリーン Fragment2 と詳細
ユーザーが Fragment1 の RecyclerView 内のアイテムを選択すると、Fragment1 を Fragment2 に置き換えます。この Fragment2 には、共有要素が異なる位置とサイズで含まれる View があります。
それを機能させるにはちょっとしたコツがあります。transitionName がリスト内の各項目に対して一意であることを確認する必要があります。もちろん、その transitionName は、アニメーションを再生する Fragment2 の要素の transitionName と一致する必要があります。この部分は機能しています。アイテムを選択すると、2 つの共有ビューがアニメーション化されますが、2 つのアクティビティ間でそれを行うときに期待する方法とはまったく異なります。
画面の下部にある項目を選択すると、Fragment2 のビューが描画され、2 つの共有ビューが画面上部の項目にあるかのようにアニメーション化されます。説明するのは難しい。ここにいくつかの写真があります
フラグメント1
フラグメント2
両方のフラグメントで、次を設定しています
setSharedElementEnterTransition(new ChangeBounds());
setSharedElementReturnTransition(new ChangeBounds());
setAllowEnterTransitionOverlap(true);
setAllowReturnTransitionOverlap(true);
onCreate() の親アクティビティにも設定しました
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
共有要素のアニメーションが、画面の下部にある選択したアイテムで開始されているのに、画面の上部から開始される理由は何ですか?