启动新活动时禁用活动幻灯片动画?

use*_*114 129 android

我有一个活动,通过点击按钮启动另一个活动.默认情况下,在较新的操作系统版本的android上,操作系统会为从右到左滑动的新活动设置动画.

有没有办法禁用这个动画?我只是想让新活动在没有任何动画的情况下出现.

Mat*_*ias 185

FLAG_ACTIVITY_NO_ANIMATION标志适用于在启动活动时禁用动画.

要禁用在调用finish()Activity 时触发的类似动画,即动画从右向左滑动,您可以在调用overridePendingTransition(0, 0)后调用finish()并排除下一个动画.

如果你在打电话overridePendingTransition(0, 0)后打电话,这也适用于动画中startActivity(...).

  • 请注意,`FLAG_ACTIVITY_NO_ANIMATION`和`overridePendingTransition`都只是API Level 5+. (9认同)
  • 你是最棒的.overridePendingTransition(0,0) - >是神似的.它仅覆盖finish()动画,但不覆盖恢复上一个活动时触发的动画. (4认同)
  • 如果您还想禁用或覆盖“后退”动画,请在您的活动中覆盖finish()方法,并将该调用与对super.finish()的调用放在一起。问题解决了。 (3认同)
  • 从返回键上的活动返回时,这无济于事。 (2认同)

Ewo*_*oks 165

恕我直言这个答案在这里以最优雅的方式解决问题..

开发者应该创建一种风格,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后在清单中将其设置为活动或整个应用程序的主题.

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>
Run Code Online (Sandbox Code Playgroud)

瞧!好,易于..

ps信用原作者请..

  • @Marek我猜你的问题是没有正确改变parent ="android:Theme".你应该用你想要使用的主题来改变它,基本上这个代码只是禁用主题中的特定动画.例如,使用"Theme.AppCompat.Light.NoActionBar"代替"android:Theme",你就会明白我的意思.我希望它有所帮助. (3认同)
  • 这更优雅 (2认同)
  • 它不适用于 Back,它改变了标题栏的外观(使它变小)... (2认同)

Sid*_*yas 31

应用

startActivity(new Intent(FirstActivity.this,SecondActivity.class));
Run Code Online (Sandbox Code Playgroud)

然后

overridePendingTransition(0, 0);
Run Code Online (Sandbox Code Playgroud)

这将停止动画.


小智 19

在我看来,最好的答案是使用 "overridePendingTransition(0, 0);"

以避免看到动画,当你想Intent给一个Activity使用:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);
Run Code Online (Sandbox Code Playgroud)

当你按下后退按钮覆盖onPause方法时,看不到动画newactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*kov 18

只需Intent.FLAG_ACTIVITY_NO_ANIMATION在启动时指定标志


cmc*_*nce 13

这在禁用完成活动动画时适用于我.

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*e B 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)在Activity的initActionBar()中失败.


Woo*_*kie 7

FLAG_ACTIVITY_NO_ANIMATION可能有效,但在与FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK结合使用时,并没有为我做好准备.我显然正在看动画创建一个带有新活动堆栈的新任务,因为我横向导航到我的其他顶级视图.

这里的工作是调用"overridePendingTransition(0,0);" 在我的startActivity()调用或onPause()之后立即执行.两种方式都有效,但是在startActivity()之后执行它可以让我更多地控制我何时想要动画以及什么时候不需要动画.