Androidデフォルトトランジションアニメーションメモ、アニメーション有効時間とoverridePendingTransition影響範囲

全画面ウィンドウ、アクティビティのデフォルトアニメーション

<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>

非全画面ウィンドウ、アクティビティのデフォルトアニメーション

<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

トランジションのデフォルトアニメーション

<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>

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);原因不明

付録 シングルタスクとシングルインスタンス

SingleTask: マークされたアクティビティが独自のアプリによって呼び出される場合、新しいタスクは作成されません。既存の SingleTask インターフェイスがフォアグラウンドに切り替えられると、SingleTask
インターフェイスの後に開いた他のインターフェイスは閉じられます。

おすすめ

転載: blog.csdn.net/yfbdxz/article/details/81098691