新しいアクティビティの起動時にアクティビティのスライドインアニメーションを無効にしますか?


140

ボタンをクリックして別のアクティビティを起動するアクティビティがあります。デフォルトでは、Androidの新しいOSバージョンでは、OSは右から左にスライドする新しいアクティビティをアニメーション化します。

このアニメーションを無効にする方法はありますか?新しいアクティビティをアニメーションなしで表示したいだけです。

回答:


190

FLAG_ACTIVITY_NO_ANIMATIONフラグが活動を開始するときに、アニメーションを無効にするための罰金に動作します。

finish()アクティビティを呼び出すときにトリガーされる同様のアニメーションを無効にするには、つまり、アニメーションを右から左にスライドさせます。呼び出しoverridePendingTransition(0, 0)後に呼び出すfinish()と、次のアニメーションが除外されます。

これは、を呼び出したoverridePendingTransition(0, 0)後に呼び出す場合、アニメーション内でも機能しますstartActivity(...)


9
FLAG_ACTIVITY_NO_ANIMATIONoverridePendingTransitionはどちらもAPIレベル5以上のみであることに注意してください。
azdev

これは、戻るキーを押したときのアクティビティから戻るときに役立ちません。
Yar

4
あなたは最高です。overridePendingTransition(0、0)->は神のようなものです。これは、finish()アニメーションのみをオーバーライドしますが、前のアクティビティを再開したときにトリガーされるアニメーションはオーバーライドしません。
Philipp Jahoda 2013

1
この回答は、「戻る」ソフトキーを押したことによる遷移には対応していないため、嫌いです。OPは、アニメーションを「無効にする」方法を尋ね、「選択的にアプリに再生しないように指示する」のではなく
1owk3y

3
「戻る」アニメーションも無効化またはオーバーライドする場合は、アクティビティのfinish()メソッドをオーバーライドし、その呼び出しをsuper.finish()への呼び出しとともにそこに配置します。問題が解決しました。
Grishka 2016年

171

私のこの答えはここで問題を最もエレガントな方法で解決します。

開発者が作成する必要がありますスタイルを

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

その後、マニフェストでアクティビティまたはアプリケーション全体のテーマとして設定します。

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

出来上がり!素敵で簡単。

原作者へのpsクレジットをお願いします。


1
バックでは機能せず、タイトルバーの外観が変更されます(小さくなります)...
Marek

他の誰かがこの「効果」を報告しなかったので、スタイルに他のいくつかのプロパティを追加しなかったと
思い

参考までに、これはrequestWindowFeature()を必要とするビュー階層で問題を引き起こす可能性があります。
Martin Marconcini、2013

少し詳しく説明すればいいので、起こり得る問題を回避します
Ewoks 2013

4
@マレク私はあなたの問題がparent = "android:Theme"を正しく変更していないと思います。使用するテーマで変更する必要があります。基本的に、このコードはテーマ内の特定のアニメーションを無効にするだけです。たとえば、「android:Theme」の代わりに「Theme.AppCompat.Light.NoActionBar」を使用すると、意味がわかります。お役に立てば幸いです。
Recomer

33

申し込む

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

その後

overridePendingTransition(0, 0);

これはアニメーションを停止します。


28

私の意見では、最良の答えは使用することです "overridePendingTransition(0, 0);"

使用したいときにアニメーションが表示されないようIntentにするにActivityは:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

また、[戻る]ボタンのオーバーライドonPauseメソッドを押したときにアニメーションが表示されないようにするnewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}


13

これは、フィニッシュアクティビティアニメーションを無効にするときに機能します。

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

9

私は4.4.2を使用しています。起動アクティビティのonCreate()で overridePendingTransition(0、0)を呼び出すと、開始アニメーションが無効になります(startActivity()が機能しなかった直後にoverridePendingTransition(0、0)を呼び出した場合)。別の回答で述べたように、finish()の後にoverridePendingTransition(0、0)を呼び出すと、閉じるアニメーションが無効になります。

ところで、 "android:windowAnimationStyle"> @ null(ここで述べた別の回答)でスタイルを設定すると、起動アクティビティがアクションバーのタイトルを設定しようとするとクラッシュすることがわかりました。さらにデバッグすると、どういうわけかこれによりwindow.hasFeature(Window.FEATURE_ACTION_BAR)がアクティビティのinitActionBar()で失敗することがわかりました。


1
オンレジュームはどうですか?単一のトップアクティビティなど。
Lassi Kinnunen

7

FLAG_ACTIVITY_NO_ANIMATIONは機能する可能性がありますが、FLAG_ACTIVITY_CLEAR_TASKおよびFLAG_ACTIVITY_NEW_TASKと組み合わせるとうまくいきませんでした。他のトップレベルのビューに横方向に移動すると、新鮮なアクティビティスタックで新しいタスクを作成するためのアニメーションが表示されているようです。

ここで機能したのは、「overridePendingTransition(0、0);」を呼び出すことでした。startActivity()呼び出しの直後またはonPause()のいずれか。どちらの方法でも機能しましたが、startActivity()の後に実行すると、アニメーションが必要な場合と必要でない場合を少し制御できます。


2

を使用して、あるアクティビティから別のアクティビティへのスライド遷移で黒い画面が表示されるという同様の問題がありましたoverridependingtransition。そして、私は以下の方法に従って、それはうまくいきました

1)noanim.xmlanimフォルダーに作成

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

そして使用された

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

最初のパラメーターは私のオリジナルのアニメーションで、2番目のパラメーターはダミーのアニメーションとしての終了アニメーションです。


1

既にスタックにあるアクティビティを開始するときに黒い背景を避けるために、私overridePendingTransition(0,0)onStart()次のように追加しまし た:

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.