Activity 设置切换动画

Posted 赤耳A狼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activity 设置切换动画相关的知识,希望对你有一定的参考价值。

设置Activity的切换动画,有两种方式:

1.使用overridePendingTransition(新Activity进入动画, 旧Activity退出动画),需要紧接在startActivity 和finish()后。

2.在manifest中配置Activity的theme。

下面着重说明第二种情况:

[html]  view plain  copy  
  1. <style name="ThemeActivity" parent="AppBaseTheme">  
  2.     <item name="android:windowAnimationStyle">@style/activityAnimatStyle</item>  
  3. </style>  
  4.   
  5. <style name="activityAnimatStyle" parent="@android:style/Animation.Activity">  
  6.   
  7.     <!-- 新Activity 进入 -->  
  8.     <item name="android:activityOpenEnterAnimation">@anim/animate_right_in</item>  
  9.     <!-- 旧Activity退出 -->  
  10.     <item name="android:activityOpenExitAnimation">@anim/animate_old_aphla</item>  
  11.     <!-- 新Activity退出 -->  
  12.     <item name="android:activityCloseExitAnimation">@anim/animate_left_out</item>  
  13.     <!-- 旧Activity进入 -->  
  14.     <item name="android:activityCloseEnterAnimation">@anim/animate_old_aphla</item>  
  15. </style>  

现在有3个Activity:A、B、C:

配置B的

[html]  view plain  copy  
  1. android:theme="@style/ThemeActivity"  
这个时候 从A 启动B,会把android:activityOpenExitAnimation作用在A上,把android:activityOpenEnterAnimation作用在B上,此时从B回退到A,将使用系统默认的动画。

若从B启动C,然后从C回退到B,此时才会将Android:activityCloseExitAnimation作用在C,将android:activityCloseEnterAnimation作用在B。

所以在使用manifest配置的时候,需要注意显示的target 所配置的属性,就如同overridePendingTransition一样。所以这四个属性决定的是【显示】当前Activity的时候,他的动画和与之关联的动画。

我们可以在application 节点中配置theme,那么所有的Activity的进出动画都是一致的,如果要单独配置两个Activity的交互动画,可以如下配置:

A-->B

在A的theme中,只用声明:

[html]  view plain  copy  
  1. <!-- 新Activity退出 -->  
  2. <item name="android:activityCloseExitAnimation">@anim/animate_left_out</item>  
  3. <!-- 旧Activity进入 -->  
  4. <item name="android:activityCloseEnterAnimation">@anim/animate_old_aphla</item>  

在B的theme中,只声明:

[html]  view plain  copy  
  1. <!-- 新Activity 进入 -->  
  2. <item name="android:activityOpenEnterAnimation">@anim/animate_right_in</item>  
  3. <!-- 旧Activity退出 -->  
  4. <item name="android:activityOpenExitAnimation">@anim/animate_old_aphla</item>  

那么从A启动B时,会执行B声明的动画,此时要显示的是B,B是主体,当从B回退到A的时候,会执行A声明的动画,此时A是主体。

此时应该很清楚这四个属性作用的时机了吧。


这里还有一点要注意,如果使用了support包,theme的parent需要继承自Theme.AppCompat ,否则会报错。

如下

[html]  view plain  copy  
  1. <style name="AppBaseTheme" parent="Theme.AppCompat.Light">  
  2.   
  3.  </style>  
  4.   
  5.  <!-- Application theme. -->  
  6.  <style name="AppTheme" parent="AppBaseTheme">  
  7.      <!-- All customizations that are NOT specific to a particular API-level can go here. -->  
  8.  </style>  
  9.   
  10.  <style name="ThemeActivity" parent="AppBaseTheme">  
  11.      <item name="android:windowAnimationStyle">@style/activityAnimatStyle</item>  
  12.  </style>  
  13.   
  14.  <style name="activityAnimatStyle" parent="@android:style/Animation.Activity">  
  15.   
  16.      <!-- 新Activity 进入 -->  
  17.      <item name="android:activityOpenEnterAnimation">@anim/animate_right_in</item>  
  18.      <!-- 旧Activity退出 -->  
  19.      <item name="android:activityOpenExitAnimation">@anim/animate_old_aphla</item>  
  20.      <!-- 新Activity退出 -->  
  21.      <item name="android:activityCloseExitAnimation">@anim/animate_left_out</item>  
  22.      <!-- 旧Activity进入 -->

    以上是关于Activity 设置切换动画的主要内容,如果未能解决你的问题,请参考以下文章

    Activity切换效果

    动画相关

    Android Fragment 切换动画设置

    Android Studio之Activity切换动画

    Android 动画进阶之动画切换

    Android技术分享| Activity 过渡动画 — 让切换更加炫酷