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


140

我有一个活动,通过单击按钮可以启动另一个活动。默认情况下,在较新的Android操作系统版本上,操作系统将为从右向左滑动的新活动设置动画。

有没有办法禁用此动画?我只希望新活动没有任何动画出现。

Answers:


190

FLAG_ACTIVITY_NO_ANIMATION启动活动时,该标志可以很好地禁用动画。

要禁用在调用finish()“活动” 时触发的类似动画,即动画从右向左滑动,您可以在调用overridePendingTransition(0, 0)后调用finish(),下一个动画将被排除。

如果在调用overridePendingTransition(0, 0)后再调用,这也可以在动画中使用startActivity(...)


9
请注意,FLAG_ACTIVITY_NO_ANIMATIONoverridePendingTransition均为API Level 5+。
azdev 2011年

从“返回”按键上的活动返回时,这无济于事。
2012年

4
你是最棒的。OverridePendingTransition(0,0)->很像上帝。它仅覆盖finish()动画,而不覆盖在恢复上一个活动时触发的动画。
菲利普·贾霍达

1
我不喜欢这个答案,因为它没有涵盖由按下“返回”软键引起的过渡。OP询问如何“禁用”动画,而不是“选择性地告诉应用程序不播放”动画
1owk3y 2014年

3
如果您还想禁用或覆盖“后退”动画,请在您的活动中覆盖finish()方法,并将该调用与对super.finish()的调用放在一起。问题解决了。
Grishka '16

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
它不适用于Back,它会更改标题栏的外观(使其变小)...
Marek

是ü确保ü没有在风格上添加一些其他的特性,引起别人没报这个“效果” U提..
伊渥克

仅供参考,这可能会在需要requestWindowFeature()的视图层次结构中引起问题。
Martin Marconcini 2013年

如果您稍作阐述,那会很好,所以我们避免了可能的问题
Ewoks

4
@Marek我猜你的问题没有正确更改parent =“ android:Theme”。您应该使用要使用的主题对其进行更改,基本上,这段代码只是禁用了主题中的特定动画。例如,使用“ Theme.AppCompat.Light.NoActionBar”代替“ android:Theme”,您会明白我的意思。希望对您有所帮助。
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);

并在您按下向后按钮Override 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(此处提到了另一个答案)会导致崩溃。进一步调试后,我发现以某种方式这会导致Activity的initActionBar()中的window.hasFeature(Window.FEATURE_ACTION_BAR)失败。


1
那onresume呢?单项顶级活动等等。
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.xml在动画文件夹中创建一个

<?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);

第一个参数是我的原始动画,第二个参数是退出动画,作为我的虚拟动画


1

为了避免启动堆栈中已有的活动时出现黑色背景,我添加 overridePendingTransition(0,0)onStart()

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

}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.