• Activity间切换的动画应用


    Activity切换过程中,系统会使用一些默认的动画,显得切换过程不至于太呆板。

    在frameworks/base/core/res/res/values下的stlyes.xml文件中有具体的定义各个过程使用哪个动画,如:

        <!-- Standard animations for a full-screen window or activity. -->
        <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="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>
    其中,具体的每个动画的定义都在在frameworks/base/core/res/res/anim目录下。

    当然,用话可以自己定制个性的切换动画:

    1. 通过代码来做:

    例如,从Activity A跳转到Activity B,可以在startActivity(intent)后面加上overridePendingTransition(R.anim.anim_in, R.anim.anim_out);来达到效果。

    public void overridePendingTransition (int enterAnim, int exitAnim)

    Since: API Level 5
    Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next.
    Parameters —— enterAnim A resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
             exitAnim A resource ID of the animation resource to use for the outgoing activity. Use 0 for no animation.

    返回时,从Activity B跳转到Activity A,我们可以在代码中重写onBackPressed()方法,在这个方法中调用finishi()后,调用overridePendingTransition(),从而能体现出需要的动画效果。

    2. 通过xml来做,就是通过theme/style方式:

    用xml来做比代码更加简洁,这里直接参考网上通用的方法。

    在AndroidManifest.xml文件中,对application和activity标签定义theme属性(如果对Application定义了某一个属性,那么会对所有的activity产生影响,当然你可以在activity中覆盖它)。

    <application android:theme="@style/new_theme">   

    然后在values/themes.xml中添加相应的style:

    <style name="new_theme">        

    <item name="android:windowAnimationStyle">@style/custom_animation</item>        

    <item name="android:windowNoTitle">true</item>      

    </style>   

    在values/styles.xml中

    <style name="custom_animation" parent="@android:style/Animation.Activity">    

    <item name="android:activityOpenEnterAnimation">@anim/open_in</item>          

    <item name="android:activityOpenExitAnimation">@anim/open_out</item>          

    <item name="android:activityCloseEnterAnimation">@anim/close_in</item>   

    <item name="android:activityCloseExitAnimation">@anim/close_out</item>      

    </style>

    这4个item分别代表的含义如下:

    Activity A跳转到Activity B时Activity B进入动画;

    Activity A跳转到Activity B时Activity A退出动画;

    Activity B返回Activity A时Activity A的进入动画

    Activity B返回Activity A时ActivityB的退出动画

    3. 消除系统默认的切换动画效果:

    系统常用的动画效果:

    实现淡入淡出的效果

    overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);    

    由左向右滑入的效果

    overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);    

    如果不想使用动画,可以将其删除。

    将上面values/styles.xml中的应用动画置为null就ok了

    <style name="custom_animation" parent="@android:style/Animation.Activity">    

    <item name="android:activityOpenEnterAnimation">@null</item>          

    <item name="android:activityOpenExitAnimation">@null</item>          

    <item name="android:activityCloseEnterAnimation">@null</item>   

    <item name="android:activityCloseExitAnimation">@null</item>      

    </style>

  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/caidi/p/4040540.html
Copyright © 2020-2023  润新知