我有一个需要成为singleInstance
的活动。但是,这样做会改变动画。
一个明显的解决方案是使用overridePendingTransition()
-有效。但是,没有公开Android的activity_open_enter
动画,并且我不认为复制其内容是可以接受的解决方案(OEM或其他版本的Android可能会为其他“活动”更改动画)。
我试图通过将任务动画指向“活动”动画属性来覆盖它们,但似乎不起作用。
有没有人有任何可能的解决方案,可以像我在下面尝试的那样,将此Activity的任务启动动画设置为与系统的Activity动画相同的动画?
<style name="TaskLaunchOverrideAnimations" parent="@android:style/Animation.Activity">
<item name="android:taskOpenEnterAnimation">?android:attr/activityOpenEnterAnimation</item>
<item name="android:taskOpenExitAnimation">?android:attr/activityOpenExitAnimation</item>
<item name="android:taskCloseEnterAnimation">?android:attr/activityCloseEnterAnimation</item>
<item name="android:taskCloseExitAnimation">?android:attr/activityCloseExitAnimation</item>
<item name="android:taskToFrontEnterAnimation">?android:attr/activityOpenEnterAnimation</item>
<item name="android:taskToFrontExitAnimation">?android:attr/activityOpenExitAnimation</item>
<item name="android:taskToBackEnterAnimation">?android:attr/activityCloseEnterAnimation</item>
<item name="android:taskToBackExitAnimation">?android:attr/activityCloseExitAnimation</item>
</style>
<style name="MyActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowAnimationStyle">@style/TaskLaunchOverrideAnimations</item>
</style>
注意:如果我在anim文件夹中换出了自定义动画的属性引用,则上述解决方案“有效”。但是,我希望使用系统默认的Activity启动动画–我既不能直接引用也不能复制内容(因为OEM或将来的Android版本可能使用不同的内容)。
注2:MyActivity是一项活动,允许我使用画中画模式。文档说使用singleTask
似乎使用了默认的Activity动画。但是,从Android 9.0开始,使用singleTask
会导致一个问题,即在Activity实例成为PiP之后,我的Activity在多个任务中的多个实例开始形成。在Android 8.0中不会发生这种情况。我的解决方案是使用singleInstance
来防止在Android 9.0上出现这种情况。