Activity 设置切换动画

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

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

2.在manifest中配置Activity的theme。

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

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  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
  在CODE上查看代码片 派生到我的代码片
  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
  在CODE上查看代码片 派生到我的代码片
  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
  在CODE上查看代码片 派生到我的代码片
  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
  在CODE上查看代码片 派生到我的代码片
  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进入 -->  
  23.      <item name="android:activityCloseEnterAnimation">@anim/animate_old_aphla</item>  
  24.  </style>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值