web-dev-qa-db-ja.com

Android-共有要素の遷移は呼び出しアクティビティfinish()を伴います

私はアプリケーションをよりマテリアルにすることに取り組んでおり、共有要素の遷移を実装する方法にこだわっています。別のBを開始してから、それをバックスタックから削除するためにfinish()を呼び出すアクティビティAがあります。私の場合、2つのアクティビティ間で共有したい要素がありますが、AからBに渡されると、Aは重要ではなくなります。 startActivity(ctx、intent、bundle)の後でfinish()を呼び出さない場合、exit/enterアニメーションは完全に機能します。ただし、finishを呼び出すと、アニメーションが開始する前に非常に醜いちらつきが発生します。

私が見落としていることはありますか、それとも私がやろうとしていることを実行することは不可能ですか?

28
F.A.

OnStop関数でアクティビティを終了できます。これをAからBに移行するときにのみ発生させたい場合は、フラグを作成し、startActivity(ctx、intent、bundle)を呼び出した後にフラグを設定します。

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}

アクティビティAはもうないので、アクティビティBが完了したら、finishAfterTranstion()ではなく、finish()を呼び出すようにしてください。

アクティビティAを終了した後、戻るボタンを押すと、Bの共有要素が画面でハングする場合があります。これを回避するには、ActivityB.onEnterAnimationCompleteでtransitionNameをnullに設定します。

24
l-l

[〜#〜]更新[〜#〜]

はるかに優れたシンプルな方法

ActivityCompat. finishAfterTransition(this);

<3サポートライブラリ。

27
ksarmalkar

これはおそらく遅いですが、同じ問題がありました。私のために働いたのは:

_supportFinishAfterTransition();
_

これはサポートライブラリに含まれており、チャームのように機能します。

PS:finish()を呼び出すときにsupportFinishAfterTransition()を呼び出す必要はありません。

5
ahmed_khan_89

5.0以上でfinishAfterTransition()メソッドを試してください。終了遷移が発生した後にアクティビティを終了できます。

2
Karthik Rk

ActivityOptions.makeSceneTransitionAnimation(Activity, Android.view.View, String)を使用して移行する場合は、アクティビティBのコールバックメソッドを使用してアクティビティAを終了する必要があります。

    setEnterSharedElementCallback(new SharedElementCallback() {
        @Override
        public void onSharedElementEnd(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) {
            super.onSharedElementEnd(sharedElementNames, sharedElements, sharedElementSnapshots);
                // finish Activity A

        }
    });
0
6rchid