zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    DevExpress控件开发常用要点(项目总结版)
    DevExpress BarManager 部分用法
    DevExpress LookUpEdit和ComboBoxEdit部分用法
    DevExpress GridControl 部分用法
    DevExpress 中 WaitForm 使用
    DevExpress汉化(WinForm)
    DevExpress 使用 XtraTabbedMdiManager 控件以 Tab样式加载 Mdi窗体并合并 RibbonControl 解决方案
    DevExpress 关于 GridView 表格编辑中 点击其他按钮里导致 值未取到处理
    DevExpress 中 在做全选的全消功能的时候 加快效率
    DevExpress后置代码中初始化SQL数据源的方法
  • 原文地址:https://www.cnblogs.com/caidi/p/4040540.html
Copyright © 2011-2022 走看看