Fragment から Fragment への移行についてサポートが必要です。見つけることができるドキュメントがほとんどないため、適切に行う方法が明確ではありません。
映画のポスターを含む GridView があります。1 つのポスターをクリックすると、次のフラグメントに移動します。ポスターは共有要素であり、サイズが変更され (大きくなり)、画面を覆います。他の要素は、コンテンツの遷移に従ってフェードします。 .これは正しく動作します。
再入力トランジションを取得できません。戻るボタンを押している間、グリッド ビューの最初の要素が常に最初に表示され (コンテンツ トランジション (フェード) には従いません)、その後、他の要素がフェード インします。共有要素サイズ変更 (縮小) や他の要素の結合は行われません。他の要素と一緒にフェード インするため、コンテンツ トランジション スタイルに従います。ここに私のコードがあります:
NowShowingFragment.java には、画像付きのグリッドビューが含まれています
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
Transition shared = TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade);
shared.setDuration(2000);
setExitTransition(shared);
}
私の OnCreateView では、Picasso を使用して Web から画像を読み込みます。そのため、最初に Imageview からビットマップを抽出し、それを Activity に渡します。Activity は、表示する次のフラグメントに渡されます。終わり)。
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
imageView = (ImageView) view.findViewById(R.id.gridImage);
Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
} else {
return;
}
imageView.setTransitionName("Poster" + position);
mCallback.onArticleSelected(bmp, "Poster" + position, imageView);
}
});
主な活動
@Override
public void onArticleSelected(Bitmap bmp, String name, ImageView image) {
NowShowingDetail newFragment = new NowShowingDetail();
Transition shared=TransitionInflater.from(this).inflateTransition(android.R.transition.move);
shared.setDuration(2000);
Bundle args = new Bundle();
args.putParcelable("Bitmap", bmp);
args.putString("TransitionName", name);
newFragment.setArguments(args);
newFragment.setEnterTransition(shared);
newFragment.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
getSupportFragmentManager().beginTransaction().replace(R.id.now_showing_fragment, newFragment).addToBackStack(null).addSharedElement(image, image.getTransitionName()).commit();
}
NowShowingDetail では、これは古いフラグメントを置き換える新しいフラグメントです。共有要素を全画面表示するだけです。
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.testlayout, container, false);
ImageView imageView = (ImageView) rootView.findViewById(R.id.gridImage);
Bundle arguments = getArguments();
if (arguments != null) {
Bitmap bitmap = arguments.getParcelable("Bitmap");
imageView.setImageBitmap(bitmap);
imageView.setTransitionName(arguments.getString("TransitionName"));
}
return rootView;
}
change_image_transor.xml
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform
android:duration="2000"></changeImageTransform>
<changeBounds
android:duration="2000"></changeBounds>
<changeTransform
android:duration="2000"></changeTransform>
前もって感謝します。
編集:同じコードで、アクティビティ遷移メソッドに変更しました.これは問題なく動作します.フラグメント遷移の呼び出し方が間違っている可能性があると思います.あなたの意見に感謝します.