如何在AndroidManifest文件中正确使用Intent标志FLAG_ACTIVITY_NO_ANIMATION
?我认为我的问题很简单,但我找不到好的例子或解决方案。
<intent-filter>
<data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
</intent-filter>
但是,compliator没有报告错误,但data
不正确。
我只想在活动之间切换时禁用动画。我可以在onCreate或onResume中使用getWindow().setWindowAnimations(0);
,但是使用flag是更好的方法,不是吗?
我也可以在代码中使用:
Intent intent = new Intent(v.getContext(), newactivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
getContext().startActivity(intent);
但是我想在Android Manifest中使用这个标志。如果从第二个活动返回到第一个活动,也要禁用动画。
答案 0 :(得分:241)
您可以创建样式
<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
答案 1 :(得分:168)
如果您的上下文是一项活动,则可以调用 overridePendingTransition :
在startActivity(Intent)或其中一种风格之后立即调用 完成以指定要执行的显式过渡动画。
所以,以编程方式:
this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);
答案 2 :(得分:33)
试试这段代码,
this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
答案 3 :(得分:20)
您也可以在您不希望转换的所有活动中执行此操作:
@Override
public void onPause() {
super.onPause();
overridePendingTransition(0, 0);
}
我喜欢这种方法,因为你不必弄乱你的活动风格。
答案 4 :(得分:5)
这不是使用FLAG_ACTIVITY_NO_ANIMATION
的示例用法或说明,但是它确实回答了如何禁用Activity
切换动画,如问题标题中所述:
Android, how to disable the 'wipe' effect when starting a new activity?
答案 5 :(得分:2)
这是一个单行解决方案,适用于您应该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>
像这样:
if (!HTMLCanvasElement.prototype.toBlob) {
Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
value: function (callback, type, quality) {
var canvas = this;
setTimeout(function() {
var binStr = atob( canvas.toDataURL(type, quality).split(',')[1] ),
len = binStr.length,
arr = new Uint8Array(len);
for (var i = 0; i < len; i++ ) {
arr[i] = binStr.charCodeAt(i);
}
callback( new Blob( [arr], {type: type || 'image/png'} ) );
});
}
});
}
干杯!
答案 6 :(得分:1)
创建自己的样式覆盖android:Theme
<style name="noAnimationStyle" parent="android:Theme">
<item name="android:windowAnimationStyle">@null</item>
</style>
然后在清单中使用它:
<activity android:name=".MainActivity"
android:theme="@style/noAnimationStyle">
</activity>
答案 7 :(得分:1)
启动意图后,您可以使用以下代码:
Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
如果使用,则intent将不具有动画或过渡效果
答案 8 :(得分:0)
主题样式中的行工作正常,但用白色屏幕替换了动画。尤其是在手机速度较慢的情况下-真令人讨厌。 因此,如果您想要即时转换-您可以在主题样式中使用它:
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>