Android default transition animation memo, animation effective time and overridePendingTransition influence scope

Full screen window, Activity default animation

<resources>
    <style name="AppTheme" parent="Theme.XXXX">
        <item name="android:windowAnimationStyle">@style/Animation.Activity</item>
    </style>
    <style name="Animation.Activity">
        <item name="activityOpenEnterAnimation">@anim/activity_open_enter</item>
        <item name="activityOpenExitAnimation">@anim/activity_open_exit</item>
        <item name="activityCloseEnterAnimation">@anim/activity_close_enter</item>
        <item name="activityCloseExitAnimation">@anim/activity_close_exit</item>
        <item name="taskOpenEnterAnimation">@anim/task_open_enter</item>
        <item name="taskOpenExitAnimation">@anim/task_open_exit</item>
        <item name="launchTaskBehindTargetAnimation">@anim/launch_task_behind_target</item>
        <item name="launchTaskBehindSourceAnimation">@anim/launch_task_behind_source</item>
        <item name="taskCloseEnterAnimation">@anim/task_close_enter</item>
        <item name="taskCloseExitAnimation">@anim/task_close_exit</item>
        <item name="taskToFrontEnterAnimation">@anim/task_open_enter</item>
        <item name="taskToFrontExitAnimation">@anim/task_open_exit</item>
        <item name="taskToBackEnterAnimation">@anim/task_close_enter</item>
        <item name="taskToBackExitAnimation">@anim/task_close_exit</item>
        <item name="wallpaperOpenEnterAnimation">@anim/wallpaper_open_enter</item>
        <item name="wallpaperOpenExitAnimation">@anim/wallpaper_open_exit</item>
        <item name="wallpaperCloseEnterAnimation">@anim/wallpaper_close_enter</item>
        <item name="wallpaperCloseExitAnimation">@anim/wallpaper_close_exit</item>
        <item name="wallpaperIntraOpenEnterAnimation">@anim/wallpaper_intra_open_enter</item>
        <item name="wallpaperIntraOpenExitAnimation">@anim/wallpaper_intra_open_exit</item>
        <item name="wallpaperIntraCloseEnterAnimation">@anim/wallpaper_intra_close_enter</item>
        <item name="wallpaperIntraCloseExitAnimation">@anim/wallpaper_intra_close_exit</item>
        <item name="fragmentOpenEnterAnimation">@animator/fragment_open_enter</item>
        <item name="fragmentOpenExitAnimation">@animator/fragment_open_exit</item>
        <item name="fragmentCloseEnterAnimation">@animator/fragment_close_enter</item>
        <item name="fragmentCloseExitAnimation">@animator/fragment_close_exit</item>
        <item name="fragmentFadeEnterAnimation">@animator/fragment_fade_enter</item>
        <item name="fragmentFadeExitAnimation">@animator/fragment_fade_exit</item>
    </style>
</resources>

Non-full-screen window, Activity default animation

<style name="AppTheme" parent="Theme.XXXX">
    <item name="android:windowAnimationStyle">@style/Animation.Dialog</item>
</style>
<style name="Animation.Dialog">
    <item name="windowEnterAnimation">@anim/dialog_enter</item>
    <item name="windowExitAnimation">@anim/dialog_exit</item>
</style>

...等等 参考android/frameworks/base/core/res/res/values/styles.xml

Default animation in Transition

<resources>
    <style name="AppTheme" parent="Theme.XXXX">
        <item name="windowContentTransitions">false</item>
        <item name="windowActivityTransitions">true</item>
        <item name="windowEnterTransition">@transition/fade</item>
        <item name="windowExitTransition">@transition/slide_bottom</item>//这个不是默认的
        <item name="windowSharedElementEnterTransition">@transition/move</item>
        <item name="windowSharedElementExitTransition">@transition/move</item>
        <item name="windowAllowEnterTransitionOverlap">true</item>
        <item name="windowAllowReturnTransitionOverlap">true</item>
    </style>
</resources>

Effective time, and the scope of influence of overridePendingTransition

Android7.0 (Pixel XL API24 x86_64)
1、同一Task,以下四个动画生效
       activityOpenEnterAnimation/activityOpenExitAnimation
       activityCloseEnterAnimation/activityCloseExitAnimation
   例如:
        Activity1启动Activity2
             Acivity1使用Activity2的styles.xml中声明的activityOpenExitAnimation
             Acivity2使用Activity2的styles.xml中声明的activityOpenEnterAnimation
        Activity2返回Activity1
             Acivity1使用Activity1的styles.xml中声明的activityCloseEnterAnimation
             Acivity2使用Activity1的styles.xml中声明的activityCloseExitAnimation
2、不同Task(设置了SingleInstance或两个应用),以下四个动画生效
        taskOpenEnterAnimation/taskOpenExitAnimation
        taskCloseEnterAnimation/taskCloseExitAnimation
   例如:
        应用1的Activity1启动应用2的Activity2
             Acivity1使用Activity2的styles.xml中声明的taskOpenExitAnimation
             Acivity2使用Activity2的styles.xml中声明的taskOpenEnterAnimation
        应用2的Activity2返回应用1的Activity1
             Acivity1使用Activity1的styles.xml中声明的taskCloseEnterAnimation
             Acivity2使用Activity1的styles.xml中声明的taskCloseExitAnimation
3、不同Task,当Task被move到顶层或底层时{例如:重写finish(),在finish()方法中调moveTaskToBack(true)
   },以下四个动画生效
        taskToFrontEnterAnimation/taskToFrontExitAnimation
        taskToBackEnterAnimation/taskToBackExitAnimation
   例如:
        Activity2设置了启动模式为SingleInstance
        Activity1启动Activity2
             Acivity1使用Activity2的styles.xml中声明的taskToFrontExitAnimation
             Acivity2使用Activity2的styles.xml中声明的taskToFrontEnterAnimation
        Activity2返回Activity1
             Acivity1使用Activity1的styles.xml中声明的taskToBackEnterAnimation
             Acivity2使用Activity1的styles.xml中声明的taskToBackExitAnimation
4、当Activity设置了<item name="android:windowShowWallpaper">true</item>
   (123)中的动画将不生效,以下八个动画生效
        wallpaperOpenEnterAnimation/wallpaperOpenExitAnimation
        wallpaperCloseEnterAnimation/wallpaperCloseExitAnimation
        wallpaperIntraOpenEnterAnimation/wallpaperIntraOpenEnterAnimation
        wallpaperIntraCloseEnterAnimation/wallpaperIntraCloseExitAnimation
   例如:
        情景1:Activity1设置了<item name="android:windowShowWallpaper">true</item>
        Activity1启动Activity2
             Acivity1使用Activity2的styles.xml中声明的wallpaperCloseExitAnimation
             Acivity2使用Activity2的styles.xml中声明的wallpaperCloseEnterAnimation
        Activity2返回Activity1
             Acivity1使用Activity1的styles.xml中声明的wallpaperOpenEnterAnimation
             Acivity2使用Activity1的styles.xml中声明的wallpaperOpenExitAnimation

        情景2:Activity2设置了<item name="android:windowShowWallpaper">true</item>
        Activity1启动Activity2
             Acivity1使用Activity2的styles.xml中声明的wallpaperOpenExitAnimation
             Acivity2使用Activity2的styles.xml中声明的wallpaperOpenEnterAnimation
        Activity2返回Activity1
             Acivity1使用Activity1的styles.xml中声明的wallpaperCloseEnterAnimation
             Acivity2使用Activity1的styles.xml中声明的wallpaperCloseExitAnimation

        情景3:Activity1、Activity2同时设置了<item name="android:windowShowWallpaper">true</item>
        Activity1启动Activity2
             Acivity1使用Activity2的styles.xml中声明的wallpaperIntraOpenExitAnimation
             Acivity2使用Activity2的styles.xml中声明的wallpaperIntraOpenEnterAnimation
        Activity2返回Activity1
             Acivity1使用Activity1的styles.xml中声明的wallpaperIntraCloseEnterAnimation
             Acivity2使用Activity1的styles.xml中声明的wallpaperIntraCloseExitAnimation

5、overridePendingTransition(int enterAnim, int exitAnim);
   会覆盖掉以上(1234)通过windowAnimationStyle声明的动画,
   但无法覆盖5.0后的Transition{startActivity(intent, options.toBundle())};
6、遗留问题:FallbackHome启动launcher时,launcher的动画wallpaperCloseEnterAnimation去不掉
   ,只能用overridePendingTransition(0, 0);原因不明

Appendix SingleTask and SingleInstance

SingleTask: When the marked Activity is called by its own app, no new task will be created. When the existing SingleTask interface is switched to the foreground,
other interfaces opened after the SingleTask interface will be closed.
SingleInstance: New task

Guess you like

Origin blog.csdn.net/yfbdxz/article/details/81098691