2017-09-25 93 views
3

我需要禁用我的应用程序中所有屏幕的活动转换动画。以前的解决方案适用于所有Android版本运行良好:奥利奥:禁用活动转换动画

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

...但为Android 8“奥利奥”,它会导致黑屏闪烁,每转换(向前或向后移动)。即仍然没有任何动画,但非常恼人的闪烁发生(90%的几率,〜20-30毫秒,整个屏幕)。

根据我的“研究”:

  • 它不依赖于活动内容并再现空活动
  • 没有任何背景的工作,这可以减缓转型过程
  • 意图。 FLAG_ACTIVITY_NO_ANIMATION的闪烁以及
  • overridePendingTransition(0,0)没有工作过

唯一的解决办法我能找到的:

定义一个空的过渡动画

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

,并把它应用到每一个活动的应用程序(的onCreate &完成)

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

问题:

是这样吗我对奥利奥有一些新的限制(即功能)还是平台错误,或者应用程序问题? 还有其他解决方案吗?

[UPDATE]

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

[更新]

谷歌已经证实它在安卓8.0的一个bug,想必固定8.1。 所以,“空动画”的解决方法就是几年,直到的minSdkVersion == 27

+0

https://stackoverflow.com/a/11079475/2949834您是否尝试将父级更改为父级=“android:主题”? – kimkevin

+0

@KimKevin是的,它闪烁无论如何。所以它不会使用Activity或AppCompatActivity。 –

+0

@SergeyKrivenkov非常感谢你。我可以看到你做了很多艰苦的工作来深入研究并探索减少的测试用例,所以你的解决方案为我节省了大量的时间。您是否在Android问题跟踪器中报告过这个问题? – hustoj2

回答

1

我有同样的问题,我想办法解决这个问题,这个想法是玩什么,请参阅下面的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> 

动画文件夹:replace_anim。xml

<set/> 
+0

你描述了与上面问题部分提到的相同的解决方案 - 播放空的动画。但问题是:为什么会发生? –

+0

请检查问题链接。 Android确认这是一个已经修复的O中的错误。我还没有确认,但他们附上了一个视频 –