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

时间:2010-02-18 04:31:44

标签: android

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

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

11 个答案:

答案 0 :(得分:175)

FLAG_ACTIVITY_NO_ANIMATION标志可以在启动活动时禁用动画。

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

如果您在致电overridePendingTransition(0, 0)后致电startActivity(...),这也适用于动画中。

答案 1 :(得分:152)

恕我直言this回答这里以最优雅的方式解决问题..

开发者应该创建样式

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

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

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

瞧!很好,很容易..

P.S。致原作者的信用...

答案 2 :(得分:30)

应用

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

然后

overridePendingTransition(0, 0);

这将停止动画。

答案 3 :(得分:18)

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

答案 4 :(得分:17)

在我看来,最好的答案是使用"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); } 方法时看不到动画
 def add(movie)
        @movies << @name
        puts @movies
    end

答案 5 :(得分:11)

当禁用完成活动动画时,这适用于我。

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

答案 6 :(得分:8)

我在4.4.2上,在启动活动中调用overridePendingTransition(0,0)onCreate()将禁用启动动画(调用overridePendingTransition(0, 0)startActivity()之后不能正常工作)。如另一个答案所述,在finish()之后调用overridePendingTransition(0,0)会禁用关闭动画。

顺便说一下,我发现用&#34; android:windowAnimationStyle&#34;&gt; @null(这里提到的另一个答案)设置样式会导致我的启动活动尝试设置操作栏标题时崩溃。进一步调试,我发现这会导致window.hasFeature(Window.FEATURE_ACTION_BAR)在Activity的initActionBar()中失败。

答案 7 :(得分:7)

FLAG_ACTIVITY_NO_ANIMATION可能会有效,但在与FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK结合使用时,我无法解决这个问题。我显然正在看动画创建一个带有新活动堆栈的新任务,因为我横向导航到其他顶级视图。

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

答案 8 :(得分:1)

我遇到类似的问题,即使用overridependingtransition从一个活动滑动到另一个活动时会出现黑屏。我按照下面的方式工作

1)在anim文件夹中创建了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);

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

答案 9 :(得分:1)

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

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

}

答案 10 :(得分:1)

要解决问题: FLAG_ACTIVITY_NO_ANIMATION(或主题中的 android:windowAnimationStyle = @null)对于进入和退出都非常有效。 问题是,进入动画检查动画是否在一个活动中启用,退出动画检查另一个活动。所以一定要在这两个活动中禁用它。