Androidでアニメーションなしのアクティビティを切り替える方法は?


165

FLAG_ACTIVITY_NO_ANIMATIONAndroidManifestファイルでIntentフラグを適切に使用するにはどうすればよいですか?私の問題は些細なことだと思いますが、良い例や解決策を見つけることができません。

    <intent-filter>
        <data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
    </intent-filter>

ただし、コンパイラーによってエラーは報告されdataませんが、正しくありません。アクティビティを切り替える場合に備えて、アニメーションを無効にしたいだけです。getWindow().setWindowAnimations(0);むしろonCreateまたはonResumeで使用できますが、フラグを使用する方がより良い方法ですね。

コードでも使用できます:

    Intent intent = new Intent(v.getContext(), newactivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    getContext().startActivity(intent);

しかし、私はこのフラグをAndroidマニフェストで使用したいと思います。2番目のアクティビティから最初のアクティビティに戻る場合にもアニメーションを無効にします。


私はテーマを使用する提案を見つけました-アクティビティまたはアプリケーション全体の開始、終了アニメーションを定義することによって。誰かがそれについてもっと情報をくれますか?
ウォヤル、2011

回答:


269

スタイルを作成できます

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

マニフェストでアクティビティのテーマとして設定します。

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

スタイルを定義して、カスタムの入口と出口のアニメーションを指定することもできます。 http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation


おかげで、これは特に、タスクアフィニティの異なる最近のアクティビティから除外された透明/ダイアログテーマのアクティビティに最適です。これがないと、アニメーションが表示され続け、ダイアログを開いたときに非常に奇妙な結果が生じます!
2013年

これはLollipop / Android 5.0では機能しないようです。
ケニー2015年

私はAndroid 5を持っていますが、それでうまくいきます。アプリのスタイルは次のようになります:<style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> <item name = "android:windowAnimationStyle"> @ null </ item> </ style>
eatyourgreens

6.0でも完全に動作します。素晴らしいヒント。以下に尋ねるように、私は*最初にアプリを起動したときに発生するアニメーションを無効にする方法を知りたいです ...方法はありますか?!
Fattie 2016年

5
AppCompatActivityを拡張するとクラッシュします
Mike6679

191

コンテキストがアクティビティの場合は、overridePendingTransitionを呼び出すことができます

startActivity(Intent)のいずれかのフレーバーの直後に呼び出すか、finishを実行して、次に実行する明示的な遷移アニメーションを指定します。

したがって、プログラム的に:

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

adb経由でもそれを行うことは可能ですか?
Android開発者

@TalAngel overridePendingTransitionだから、何それは「すべての」のAndroid版で作業をしないAPIレベル5で追加されていないが、私はあなたが5より高いAPIレベルを対象と推測した
ブルーノBieri

43

このコードを試してください、

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));

1
これは、サービスから活動を開始するときに本当に役立ちます。
DearDhruv 2016

24

また、移行したくないすべてのアクティビティでこれを実行することもできます。

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

あなたはあなたの活動のスタイルを台無しにする必要がないので、私はこのアプローチが好きです。


素晴らしいヒント。*最初にアプリを起動したときに発生するアニメーションを無効にする方法を知りたいのですが ...方法はありますか?
Fattie 2016年

@Fattie起動アクティビティのonStart()メソッドをオーバーライドして、同じコードをその中に配置します。
Jawad Adil


4

以下は、minSdkVersion 14挿入する必要がある最低限まで機能するワンライナーソリューションですres/styles.xml

<item name="android:windowAnimationStyle">@null</item>

そのようです:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>

乾杯!


3

テーマスタイルの線は問題なく機能しますが、アニメーションは白い画面に置き換えられます。特に遅い電話では-それは本当に迷惑です。したがって、インスタントトランジションが必要な場合は、これをテーマスタイルで使用できます。

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>

2

android:Themeをオーバーライドして独自のスタイルを作成する

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

次に、次のようにマニフェストで使用します。

<activity android:name=".MainActivity"
    android:theme="@style/noAnimationStyle">
</activity>

0

インテントを開始した後、次のコードを使用できます。

Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);

使用した場合、インテントはアニメーションや遷移なしで機能します

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