我有一个活动,通过单击按钮启动另一个活动。默认情况下,在较新的 Android 操作系统版本上,操作系统将为新 Activity 从右向左滑入设置动画。
有没有办法禁用这个动画?我只是希望新活动在没有任何动画的情况下出现。
FLAG_ACTIVITY_NO_ANIMATION
标志可以很好地在启动活动时禁用动画。
要禁用在 Activity 上调用
finish()
时触发的类似动画,即动画从右向左滑动,您可以在调用 overridePendingTransition(0, 0)
后调用 finish()
,下一个动画将被排除。
如果您在调用
overridePendingTransition(0, 0)
之后调用 startActivity(...)
,这也适用于动画中。
免责声明: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>
瞧!又好又简单..
附注感谢原作者
申请
startActivity(new Intent(FirstActivity.this,SecondActivity.class));
然后
overridePendingTransition(0, 0);
这将停止动画。
我认为最好的答案是使用
"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);
}
启动时只需指定
Intent.FLAG_ACTIVITY_NO_ANIMATION
标志
当禁用完成 Activity 动画时,这对我有用。
@Override
protected void onPause() {
super.onPause();
overridePendingTransition(0, 0);
}
我使用的是 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() 中失败。
FLAG_ACTIVITY_NO_ANIMATION 可能有效,但与 FLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASK 结合使用时,对我来说并没有什么作用。当我横向导航到其他顶级视图时,我显然看到了使用新活动堆栈创建新任务的动画。
这里起作用的是调用“overridePendingTransition(0, 0);”在我的 startActivity() 调用或 onPause() 之后立即执行。两种方法都有效,但是在 startActivity() 之后执行可以让我更好地控制何时需要动画、何时不需要动画。
为了避免在启动堆栈中已有的活动时出现黑色背景,我添加了
overridePendingTransition(0,0)
在onStart()
:
@Override
protected void onStart() {
overridePendingTransition(0,0);
super.onStart();
}
我遇到了类似的问题,使用
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);
第一个参数作为我的原始动画,第二个参数是退出动画作为我的虚拟动画
澄清一下:
FLAG_ACTIVITY_NO_ANIMATION
(或主题中的android:windowAnimationStyle = @null
)对于进入和退出都非常有效。
问题是,进入动画检查动画是否在一个活动中启用,退出动画检查另一个活动是否启用动画。因此,请确保在这两项活动中禁用它。
比方说,我们通过单击按钮来刷新页面...然后使用以下代码片段
buttonRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(getIntent().addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
}
});