没有动画的切换活动

woy*_*aru 154 animation android android-intent android-activity

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

<intent-filter>
    <data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

但是,compliator没有报告错误,但是data不正确.我只想在活动之间切换时禁用动画.我可以getWindow().setWindowAnimations(0);在onCreate或onResume中使用,但使用flag是更好的方法,不是吗?

我也可以在代码中使用:

Intent intent = new Intent(v.getContext(), newactivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
getContext().startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

但是我想在Android Manifest中使用这个标志.如果从第二个活动返回到第一个活动,也要禁用动画.

小智 253

你可以创造一种风格,

 <style name="noAnimTheme" parent="android:Theme">
   <item name="android:windowAnimationStyle">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

   <activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
    </activity>
Run Code Online (Sandbox Code Playgroud)

您还可以定义样式以指定自定义输入和退出动画. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation

  • 如果扩展AppCompatActivity,将会崩溃 (3认同)

esh*_*azi 177

如果您的上下文是一个活动,您可以调用overridePendingTransition:

在startActivity(Intent)之一或完成之后立即调用以指定要执行的显式转换动画.

所以,以编程方式:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);
Run Code Online (Sandbox Code Playgroud)


小智 38

试试这段代码,

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
Run Code Online (Sandbox Code Playgroud)

  • 当从服务启动活动时,这确实很有帮助。 (3认同)

Tas*_*ons 23

您也可以在您不希望转换的所有活动中执行此操作:

@Override
public void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
Run Code Online (Sandbox Code Playgroud)

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


Vla*_*rev 9

主题样式中的线条效果很好,但它用白屏代替了动画。尤其是在速度较慢的手机上 - 这真的很烦人。因此,如果您想要即时过渡 - 您可以在主题样式中使用它:

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>
Run Code Online (Sandbox Code Playgroud)


use*_*104 6

这是一种单行解决方案,适用于minSdkVersion 14您应该插入的最低限度res/styles.xml

<item name="android:windowAnimationStyle">@null</item>
Run Code Online (Sandbox Code Playgroud)

像这样:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>
Run Code Online (Sandbox Code Playgroud)

干杯!


小智 6

启动意图后,您可以使用以下代码:

Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

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


Phi*_*hil 5

这不是示例用法,也不是用法说明FLAG_ACTIVITY_NO_ANIMATION,但是它确实回答了如何禁用Activity切换动画,如问题标题中所问:

Android,如何在开始新活动时禁用“擦除”效果?