私のアプリケーション タブレット レイアウトには、画像のグリッドを含むグリッド ビュー (RecyclerView) が左側にあり、詳細ビューが右側にあり、現在選択されているグリッド ビュー画像の縮小版とその画像を説明する追加のテキスト ビューが表示されます。クリックした画像ビュー (左側のグリッド ビュー フラグメント) を詳細ビュー フラグメントの一致する位置にスライドおよびスケーリングする共有要素アニメーション トランジションを提供する方法を見つけようとしています。各画像の選択をバックスタックに記録したくないため、私のアプリケーションは「入力」トランジションのみを必要とします。
OnItemClick(View view)
次のように、ハンドラーで標準の共有要素サポート呼び出しを使用してみました。
DetailFragment detailFragment = detailFragment.newInstance(mFragmentId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
movieDetailFragment.setSharedElementEnterTransition(
TransitionInflater.from(this).inflateTransition(
R.transition.change_image_transform));
view.setTransitionName(getString(
R.string.image_transition_name));
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.detail_container,
detailFragment,
DETAIL_FRAGMENT_TAG)
.addSharedElement(view, getString(R.string.image_transition_name))
.commit();
"view" 変数は、ユーザーがグリッド ビューでクリックした ImageView です。私の詳細フラグメントのonCreate()
メソッドにもエントリが含まれています
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mImageView.setTransitionName(
getString(R.string.image_transition_name));
}
次の change_image_transform.xml トランジション セットも使用しています。
<transitionSet>
<changeImageTransform/>
<changeBounds/>
</transitionSet>
一緒に
<item name="android:windowContentTransitions">true</item>
<item name="android:windowActivityTransitions">true</item>
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
これらの設定はすべて、シングル ペイン モードで適切に機能します。ユーザーがグリッド ビュー アクティビティ内の画像をクリックすると、(新しいアクティビティ内の) 詳細フラグメントがグリッド ビューを置き換え、アニメーションは入口と出口の両方のシナリオで完全に機能します。
ただし、2 ペイン モードでは、画像はグリッド ビューのソースから新しく作成された詳細フラグメントの宛先にスライドおよびスケーリングされません。私が抱えている問題は、ソース ImageView が永続的に表示されるグリッド ビュー フラグメントに存在するため、アニメーション フレームワークのトランジション処理に含まれないことが原因であると考えています。
私の検索では、単純なカスタム アニメーションを使用するという漠然とした推奨事項以外に、この問題に対する明確な答えは見つかりませんでした。テストとして単純な TranslateAnimation (スケーリングなし) を試しましたが、これには 2 つの問題がありました: 画像がグリッド ビュー フラグメントの境界を越えることができず、実際に画像を「移動」するという望ましくない副作用がありました (アニメーションが実行されている間、グリッド ビューに一時的に空のスポットが表示されます)。最終的に、目的の効果は、元の画像が消去されることなく、ソースから宛先への画像のスライドとスケーリングを確認することです。
提案やアドバイスをいただければ幸いです。