web-dev-qa-db-ja.com

Android-アクティビティの変更の合間にアニメーションを停止する方法

アプリに複数の異なるアクティビティがあり、アクティビティ間で変更するときに遷移アニメーションが必要ありません。以下は、アクティビティ間でどのように変更するかです。

Intent i = new Intent(FirstActivity.this, SecondActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(i);

これは、新しいアクティビティを初めて開始するときにうまく機能します。アニメーションはありませんが、すでに開始されているアクティビティに戻ると、「Intent.FLAG_ACTIVITY_NO_ANIMATION」が無視され、デフォルトのアニメーションが表示されるようです。

なぜこれが起こっているのか理解できないようです。

25
KevinM

overridePendingTransition() を試しましたか?

43
CommonsWare

FLAG_ACTIVITY_REORDER_TO_FRONTはコードで設定でき、FLAG_ACTIVITY_NO_ANIMATIONはマニフェストで次のように設定できます。

Res/values /styles.xmlにnoAnimThemeを作成します

<style name="noAnimTheme" parent="Android:Theme">
   <item name="Android:windowAnimationStyle">@null</item>
</style>

または

<style name="noAnimTheme" parent="Android:Theme.NoTitleBar">
   <item name="Android:windowAnimationStyle">@null</item>
</style>

マニフェストで使用します。

<activity Android:name="SecondActivity" Android:theme="@style/noAnimTheme"/>

お役に立てば幸いです

16
thanhbinh84

メニューをクリックしてアクティビティを作成する必要があったため、これが必要でした。

私は次のことをしました:

インテントにFLAG_ACTIVITY_NO_ANIMATIONフラグを追加しました。初めてアクティビティを作成しているときにアニメーションを停止しました。

ただし、同じメニューをもう一度クリックしたときに呼び出されたスタック内のアクティビティ(おそらく別のアクティビティから)には、アニメーションがありました。

そこで、FLAG_ACTIVITY_NO_HISTORYを追加して、新しいアクティビティを開始したときにアクティビティをクリアするか、終了しました。これにより、メニューをもう一度クリックすると、新しいアクティビティ(アニメーションなし)が作成されました。

3
Naresh R

2番目のインテントを作成した後にこれを追加します

        Intent i = new Intent(SecondActivity.this, FirstActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(i);

最初の意図に戻ると、アニメーションは無効になっていますが、私のために働いています

3
Shreyash Padhi

FLAG_ACTIVITY_REORDER_TO_FRONTを使用している場合は、後でstartActivityを呼び出すためにonNewIntentをオーバーライドすることもできます。これは、最初の呼び出しではなく、最前線の状態にするために機能します。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    overridePendingTransition(R.anim.whatever, R.anim.whatever);
}

もちろん、これをターゲットアクティビティに実装する必要があります。

1
asozcan