私は Alex Lockwood のすばらしいブログ投稿の手順に従って、新しい Lollipop アクティビティと共有要素の移行を数日間実装しようと試みてきました。しかし今、私は少し問題に直面しています。
私のアプリケーションでは、ナビゲーションに DrawerLayout を使用していますが、他のビューやボタンをクリックすると、一部のアクティビティを起動することもできます。すべてのアクティビティの Enter、Reenter、Return、Exit トランジションをすべて正しく設定し、次の呼び出しを行いました。
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(activity, getSharedViewsPairs(activity)).toBundle());
それらの活動間の共有要素のために。
アクティビティを初めて起動すると、トランジションがうまく機能します。私の問題は、以前に呼び出されたアクティビティを起動/再開しようとしたときに発生しますが、現在は一時停止されており、アクティビティスタックに残っています。このアクティビティを前面に表示しようとすると、遷移がありません。
また、すべてのアクティビティに Intent フラグFLAG_ACTIVITY_REORDER_TO_FRONTを設定して、以前に起動したことがある場合に再度起動しないようにする必要があります。これは何か関係があるのでしょうか?トランジションで以前に開始されたアクティビティを再開するときに呼び出す必要があるメソッドがありませんか?
アクティビティ遷移を準備するためのコード:
public static void requestTransitionsAnimations(Activity activity) {
if(MaterialAnimations.isAnimationSupported()){
Transition transition = TransitionInflater.from(activity).inflateTransition(R.transition.material_transitions);
activity.getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
activity.getWindow().setAllowEnterTransitionOverlap(true);
activity.getWindow().setAllowReturnTransitionOverlap(true);
activity.getWindow().setEnterTransition(new Explode());
activity.getWindow().setReenterTransition(new Explode());
activity.getWindow().setReturnTransition(new Explode());
activity.getWindow().setExitTransition(new Explode());
activity.getWindow().setSharedElementsUseOverlay(true);
activity.getWindow().setSharedElementEnterTransition(transition);
activity.getWindow().setSharedElementReenterTransition(transition);
activity.getWindow().setSharedElementExitTransition(transition);
activity.getWindow().setSharedElementReturnTransition(transition);
}
}
なので