switching activities without animation

2019-01-01 14:49发布

问题:

How can I use properly the Intent flag FLAG_ACTIVITY_NO_ANIMATION in AndroidManifest file? I supose my problem is trivial, but I can\'t find good example or solution to it.

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

However no error is reported by compliator, but data isn\'t correct. I just want to disable animation in case switching between activities. I can use getWindow().setWindowAnimations(0); in onCreate or onResume rather but using flag is better way, isn\'t it?

I can use also in code:

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

But I want to use this flag in Android Manifest. To disable animation also in case returning from second activity to first.

回答1:

You can create a style,

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

and set it as theme for your activity in the manifest:

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

You can also define a style to specify custom entry and exit animations. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation



回答2:

If your context is an activity you can call overridePendingTransition:

Call immediately after one of the flavors of startActivity(Intent) or finish to specify an explicit transition animation to perform next.

So, programmatically:

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


回答3:

Try this code,

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


回答4:

You can also just do this in all the activities that you dont want to transition from:

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

I like this approach because you do not have to mess with the style of your activity.



回答5:

This is not an example use or an explanation of how to use FLAG_ACTIVITY_NO_ANIMATION, however it does answer how to disable the Activity switching animation, as asked in the question title:

Android, how to disable the 'wipe' effect when starting a new activity?



回答6:

Here is a one-liner solution that works for as low as minSdkVersion 14 which you should insert in you res/styles.xml:

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

like so:

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

Cheers!



回答7:

create your own style overriding android:Theme

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

Then use it in manifest like this:

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