奥利奥:禁用活动过渡动画

时间:2017-09-25 09:30:16

标签: android android-animation android-8.0-oreo

我需要为我的应用程序中的所有屏幕禁用活动过渡动画。以前的解决方案适用于所有Android版本:

<style name="base_theme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowAnimationStyle">@null</item>
</style>

...但是对于Android 8&#34; Oreo&#34;每次转换(向前或向后移动)都会导致黑屏闪烁。即仍然没有任何动画,但发生非常恼人的眨眼(90%几率,~20-30毫秒,整个屏幕)。

根据我的研究&#34;:

  • 它不依赖于活动内容并以空活动再现
  • 没有任何背景工作可能会减缓过渡过程
  • Intent.FLAG_ACTIVITY_NO_ANIMATION也闪烁
  • overridePendingTransition(0,0)也不起作用

我能找到的唯一解决方案:

定义一个空过渡动画

<?xml version="1.0" encoding="utf-8"?>
<set />

并将其应用于应用程序中的每个活动(onCreate&amp; finish)

overridePendingTransition(R.anim.animation_activity_none, R.anim.animation_activity_none);

问题:

是对Oreo(即功能),平台错误,还是应用程序问题的某种新限制? 还有其他解决方案吗?

[UPDATE]

还有一个发现。确保在主线程上调用Activity finish()和overridePendingTransition()对!否则会发生线程竞争,并且有时不会应用overridePendingTransition。

[UPDATE]

Google已经确认它是Android 8.0中的一个错误,大概是在8.1中修复的。 所以&#34;空动画&#34;修复是多年,直到minSdkVersion == 27。

1 个答案:

答案 0 :(得分:3)

我有同样的问题,我设法解决了,想法是什么都不玩,请看下面的xml:

值文件夹

<style name="yourTheme">
    <item name="android:windowAnimationStyle">@style/ThemeApp.Animation.Activity.Replace</item>

<style name="ThemeApp.Animation.Activity.Replace">
    <item name="android:activityOpenEnterAnimation">@anim/replace_anim</item>
    <item name="android:activityOpenExitAnimation">@anim/replace_anim</item>
    <item name="android:activityCloseEnterAnimation">@anim/replace_anim</item>
    <item name="android:activityCloseExitAnimation">@anim/replace_anim</item>
    <item name="android:taskOpenEnterAnimation">@anim/replace_anim</item>
    <item name="android:taskOpenExitAnimation">@anim/replace_anim</item>

Anim文件夹:replace_anim.xml

<set/>