Activity转场动画 overridePendingTransition


overridePendingTransition方法介绍

public void overridePendingTransition (int enterAnim, int exitAnim)。

  • enterAnim 定义Activity进入屏幕时的动画;
  • exitAnim 定义Activity退出屏幕时的动画
Android已经内置了几种动画效果,可以见 android.R.anim 类。
Activity的位置定义,如下图:
Activity转场动画 overridePendingTransition_第1张图片

  • 当Activity在X轴值=-100%p时,刚好在屏幕的左边;=0%p时,刚好在屏幕内;=100%p时,刚好在屏幕右边
  • 坐标原点是在屏幕左上角,屏幕区域都是正的。

使用overridePendingTransition时要主意,它必需紧挨着startActivity()或者finish()函数之后调用。
不过有时候overridePendingTransition 这个函数会不起作用,总结下,大概是以下几个方面的原因:

  • 1、android系统版本2.0以下,这个没办法解决。
  • 2、在ActivityGroup等的嵌入式Activity中,这个比较容易解决,用 this.getParent().overridePendingTransition 就可以解决。
  • 3、在一个Activity的内部类中,或者匿名类中,这时候只好用handler来解决了。
  • 4、手机的显示动画效果被人为或者其他方式给关闭了 现在打开即可 设置->显示->显示动画效果


系统定义好的动画经典效果

【淡入淡出效果】 overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);

【由左向右滑入的效果】   overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);

fade_in 淡入

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromAlpha="0.0"
    android:interpolator="@interpolator/decelerate_quad"
    android:toAlpha="1.0" />

fade_out 淡出

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_mediumAnimTime"
    android:fromAlpha="1.0"
    android:interpolator="@interpolator/accelerate_quad"
    android:toAlpha="0.0" />

slide_in_left 从左边淡入到屏幕

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="-50%p"
        android:toXDelta="0" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>  

slide_out_right 淡出到右边屏幕

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="0"
        android:toXDelta="50%p" />
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>  
 <integer name="config_mediumAnimTime">400</integer>


windowAnimation与ActivityAnimation

我的问题:

  • 1、完全不知道怎么使用windowAnimation,根本没有这个相关的属性,强制写上就报错!
  • 2、使用ActivityAnimation时eclipse中并没有代码提示,并且引用时的属性是的<item name="android:windowAnimationStyle">,明明是以window开头,他却非说是ActivityAnimation
  • 3、使用ActivityAnimation之后完全没有效果!

android转场动画【windowAnimation】和【ActivityAnimation】的区别主要如下

  • windowAnimation包括 windowEnterAnimation 和 windowExitAnimation ;  
  • ActivityAnimation包含 activityOpenEnterAnimation,activityOpenExitAnimation,activityCloseEnterAnimation和activityCloseExitAnimation
  • 在项目中WindowAnimation的控制权大于Activity的控制权,即在Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,那么可能(因为这种情况非常多)只会执行WindowAnimation
  • WindowAnimation在style.xml文件中只需要继承Animation即可。使用时

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

        <!--窗体进入动画--> <item name = "android:windowEnterAnimation"> @anim/slide_left_enter </item>
        <!--窗体退出动画--> <item name = "android:windowExitAnimation"> @anim/slide_right_exit </item>
    </style>
  • ActivityAnimation需要继承Animation.Activity

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

      <item name="android:activityOpenEnterAnimation">@android:anim/slide_in_left</item>
      <item name="android:activityOpenExitAnimation">@android:anim/slide_out_right</item>
      <item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>
      <item name="android:activityCloseExitAnimation">@anim/push_left_out</item>
</style>

当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation

当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation
当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation
当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation
  • ActivityAnimation可以同时控制2个Activity的动画,而WindowAnimation只能控制下一个Activity的窗体动画。
  • 在开发中,窗体动画也可以使用 Activity.overridePendingTransition来设置,但Activity只能使用在主题中




来自为知笔记(Wiz)


附件列表

     

    你可能感兴趣的:(Activity转场动画 overridePendingTransition)