启动新活动时禁用活动滑入动画?

问题描述 投票:0回答:12

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

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

android
12个回答
213
投票

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

要禁用在 Activity 上调用

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

如果您在调用

overridePendingTransition(0, 0)
之后调用
startActivity(...)
,这也适用于动画中。


196
投票

免责声明:10 多年前的答案。请参阅最新的可用文档,无论您相信与否,事情都会发生变化。

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

开发人员应该创建一个样式

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

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

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

瞧!又好又简单..

附注感谢原作者


44
投票

申请

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

然后

overridePendingTransition(0, 0);

这将停止动画。


33
投票

我认为最好的答案是使用

"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);
}

21
投票

启动时只需指定

Intent.FLAG_ACTIVITY_NO_ANIMATION
标志


17
投票

当禁用完成 Activity 动画时,这对我有用。

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

10
投票

我使用的是 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() 中失败。


9
投票

FLAG_ACTIVITY_NO_ANIMATION 可能有效,但与 FLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASK 结合使用时,对我来说并没有什么作用。当我横向导航到其他顶级视图时,我显然看到了使用新活动堆栈创建新任务的动画。

这里起作用的是调用“overridePendingTransition(0, 0);”在我的 startActivity() 调用或 onPause() 之后立即执行。两种方法都有效,但是在 startActivity() 之后执行可以让我更好地控制何时需要动画、何时不需要动画。


3
投票

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

overridePendingTransition(0,0)
onStart()

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

}

3
投票

我遇到了类似的问题,使用

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

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


2
投票

澄清一下:

FLAG_ACTIVITY_NO_ANIMATION
(或主题中的
android:windowAnimationStyle = @null
)对于进入和退出都非常有效。 问题是,进入动画检查动画是否在一个活动中启用,退出动画检查另一个活动是否启用动画。因此,请确保在这两项活动中禁用它。


0
投票

比方说,我们通过单击按钮来刷新页面...然后使用以下代码片段

        buttonRefresh.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(getIntent().addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.