Ser*_*kov 5 android android-animation android-8.0-oreo
我需要为应用程序中的所有屏幕禁用活动过渡动画。先前的解决方案适用于所有Android版本:
<style name="base_theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowAnimationStyle">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)
...但是对于Android 8“ Oreo”,每次转换(前进或后退)都会导致黑屏闪烁。也就是说,仍然没有任何动画,但是会发生非常烦人的闪烁(90%的机会,约20-30毫秒,整个屏幕)。
根据我的“研究”:
我能找到的唯一解决方案:
定义一个空的过渡动画
<?xml version="1.0" encoding="utf-8"?>
<set />
Run Code Online (Sandbox Code Playgroud)
并将其应用于应用程序中的每个活动(onCreate&finish)
overridePendingTransition(R.anim.animation_activity_none, R.anim.animation_activity_none);
Run Code Online (Sandbox Code Playgroud)
题:
这是对Oreo(即功能),平台错误或应用程序问题的某种新限制吗?还有其他解决方案吗?
[更新]
还有一个发现。确保在主线程上调用Activity finish()和overridePendingTransition()对!否则会发生线程争用并且有时不应用overridePendingTransition。
[更新]
Google已经确认这是Android 8.0中的错误,大概是在8.1中修复的。因此,“空动画”修复将持续数年,直到minSdkVersion == 27。
我遇到了同样的问题,我设法解决了它,想法是不玩任何东西,请参阅下面的xml:
值文件夹
<style name="yourTheme">
<item name="android:windowAnimationStyle">@style/ThemeApp.Animation.Activity.Replace</item>
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
动画文件夹:replace_anim.xml
<set/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |