在 Android 中如何在没有动画的情况下切换活动?

如何正确使用 AndroidManifest 文件中的意图标志 FLAG_ACTIVITY_NO_ANIMATION?我认为我的问题是微不足道的,但我不能找到好的例子或解决方案。

    <intent-filter>
<data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
</intent-filter>

然而,编译器没有报告错误,但是 data不正确。 我只是想禁用动画,以防在活动之间切换。我可以在 onCreate 或 onResume 中使用 getWindow().setWindowAnimations(0);,但是使用标志更好,不是吗?

我还可以在代码中使用:

    Intent intent = new Intent(v.getContext(), newactivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
getContext().startActivity(intent);

但是我想在 Android 舱单中使用这个标志。在从第二个活动返回到第一个活动时也禁用动画。

149084 次浏览

这不是一个例子使用或解释如何使用 FLAG_ACTIVITY_NO_ANIMATION,但它确实回答了如何禁用 Activity切换动画,如问题标题:

Android,如何禁用擦除效果时开始一个新的活动?

你可以创建一个样式,

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

并将其设置为你在清单中活动的主题:

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

您还可以定义一个样式来指定自定义进入和退出动画。 Http://developer.android.com/reference/android/r.attr.html#windowenteranimation

如果你的上下文是一个活动,你可以调用 重写未完成的过渡期:

在 startActivity (Inent)或 指定要执行的显式转换动画。

所以,从程序上来说:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

试试这个代码,

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));

你也可以在所有你不想转换的活动中这样做:

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

我喜欢这种方法,因为你不必搞乱你的活动风格。

创建您自己的风格覆盖机器人: 主题

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

然后像这样在清单中使用它:

<activity android:name=".MainActivity"
android:theme="@style/noAnimationStyle">
</activity>

这里有一个一行程序的解决方案,工程低至 minSdkVersion 14,你应该插入到你的 res/styles.xml:

<item name="android:windowAnimationStyle">@null</item>

像这样:

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:windowAnimationStyle">@null</item>
</style>
...
</resources>

干杯!

主题样式中的行工作得很好,但是它用白色屏幕替换了动画。尤其是在速度较慢的手机上——这真的很烦人。 所以,如果你想要一个即时的转变——你可以在主题风格中使用这个:

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>

在开始意图之后,你可以使用下面的代码:

Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);

如果使用,意图将在没有动画或过渡的情况下工作