プレイミュージックに似た共有要素遷移要素を作成しようとしています。カードをクリックすると、アルバム アートが新しいフラグメントの ImageView に展開されます。その後、クリックして戻ると、アニメーションがカードに戻ります。エンター アニメーションは正常に実行されていますが、問題はリターンまたはエグジット トランジションです。前のフラグメントに戻るたびにアプリがクラッシュします。これが私が得るエラーです:
java.lang.NullPointerException: null オブジェクト参照で仮想メソッド 'boolean android.support.v4.app.Fragment.getAllowReturnTransitionOverlap()' を呼び出そうとしています
アニメーション/トランジションを実行する方法は次のとおりです。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
fragment.setSharedElementReturnTransition(TransitionInflater.from(fragment.getActivity()).inflateTransition(R.transition.change_image_transform));
fragment.setReturnTransition(TransitionInflater.from(fragment.getActivity()).inflateTransition(android.R.transition.explode));
Fragment replaceFragment = new AlbumPageFragment();
replaceFragment.setSharedElementEnterTransition(TransitionInflater.from(fragment.getActivity()).inflateTransition(R.transition.change_image_transform));
replaceFragment.setEnterTransition(TransitionInflater.from(fragment.getActivity()).inflateTransition(android.R.transition.explode));
ImageView image = (ImageView) layout.findViewById(R.id.album_card_album_art);
FragmentTransaction ft = fragment.getFragmentManager().beginTransaction()
.replace(R.id.content_frame, replaceFragment)
.addToBackStack("transaction")
.addSharedElement(image, "MyTransition");
ft.commit();
}
change_image_transform.xml
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform />
</transitionSet>
content_frame はアクティビティのレイアウト ビュー内にあるため、両方のフラグメントがその中に含まれています。
私の質問は: フラグメントで共有要素遷移を適切に使用するにはどうすればよいですか? ありがとう!