我需要为我的应用程序中的所有屏幕禁用活动过渡动画。以前的解决方案适用于所有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;:
我能找到的唯一解决方案:
定义一个空过渡动画
<?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。
答案 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/>