我有一个活动,启动另一个活动,通过按钮点击。默认情况下,在较新的安卓操作系统版本中,操作系统将动画新的活动从右向左滑动。
有办法禁用这个动画吗?我只是希望新的活动出现没有任何形式的动画。
启动时只需指定 Intent.FLAG_ACTIVITY_NO_ANIMATION标志即可
Intent.FLAG_ACTIVITY_NO_ANIMATION
在启动活动时,FLAG_ACTIVITY_NO_ANIMATION标志可以很好地禁用动画。
FLAG_ACTIVITY_NO_ANIMATION
要禁用在调用活动 finish()时触发的类似动画,即动画幻灯片从右到左,你可以在调用 finish()后调用 overridePendingTransition(0, 0),下一个动画将被排除在外。
finish()
overridePendingTransition(0, 0)
如果在调用 startActivity(...)之后调用 overridePendingTransition(0, 0),这也适用于动画中的情况。
startActivity(...)
恕我直言,这个在这里用最优雅的方式解决问题。
开发人员应该创建一个 风格,
<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);
这会停止动画。
当禁用完成活动动画时,这对我有效。
@Override protected void onPause() { super.onPause(); overridePendingTransition(0, 0); }
我在4.4.2上,并且 在启动活动的 onCreate ()中调用 overridePendingTransfer (0,0)将禁用启动动画(在 startActivity ()不工作之后立即调用 overridePendingTransfer (0,0))。正如在另一个答案中指出的,在 Finish ()之后调用 overridePendingTransfer (0,0)将禁用关闭动画。
顺便说一下,我发现设置样式为“ android: windowAnimationStyle”>@null (这里提到的另一个答案)会在我的启动活动试图设置动作栏标题时导致崩溃。进一步调试后,我发现这会导致活动的 initActionBar ()中的 window.hasFeature (Window.FEATURE _ ACTION _ BAR)失败。
FLAG _ ACTIVITY _ NO _ ANIMATION 可能有用,但是当与 FLAG _ ACTIVITY _ CLEAR _ TASK 和 FLAG _ ACTIVITY _ NEW _ TASK 结合在一起时,对我来说并没有起到什么作用。当我横向导航到其他顶层视图时,我显然看到了用新活动堆栈创建新任务的动画。
在这里起作用的是在我的 startActivity ()调用或 onPuse ()调用之后立即调用“ overridePendingTransfer (0,0)”。这两种方法都有效,但是在 startActivity ()之后使用它可以让我在何时需要动画和何时不需要动画方面有更多的控制权。
我也遇到过类似的问题,使用 overridependingtransition在从一个活动到另一个活动的滑动过渡中出现黑屏。我跟着下面的路走,它起作用了
overridependingtransition
1)在 anim 文件夹中创建 noanim.xml
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);
第一个参数作为我的原始动画,第二个参数是退出动画作为我的虚拟动画
在我看来,最好的答案是使用 "overridePendingTransition(0, 0);"
"overridePendingTransition(0, 0);"
为了避免看到动画时,你想 Intent到一个 Activity使用:
Intent
Activity
this.startActivity(new Intent(v.getContext(), newactivity.class)); this.overridePendingTransition(0, 0);
当你按下后退按钮覆盖 newactivity中的 onPause方法时,不会看到动画
newactivity
onPause
为了避免在启动已经在堆栈中的活动时出现黑色背景,我添加了 onStart()中的 overridePendingTransition(0,0):
onStart()
overridePendingTransition(0,0)
@Override protected void onStart() { overridePendingTransition(0,0); super.onStart(); }
澄清事实: FLAG_ACTIVITY_NO_ANIMATION(或者主题中的 android:windowAnimationStyle = @null)对于进入和退出都非常有效。 问题是,输入动画检查一个活动中是否启用了动画,而退出动画检查另一个活动中是否启用了动画。因此,确保在两个活动中都禁用它。
android:windowAnimationStyle = @null