Activity的切换动画

本文详细介绍了如何在Android中设置全局及特定Activity的进入与退出动画,包括样式定义、主题配置及代码实现等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果是应用全局的动画,则在style文件里面定义

<style name="Animation_Activity" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/right_in</item>
        <item name="android:activityOpenExitAnimation">@anim/left_out</item>
        <item name="android:activityCloseEnterAnimation">@anim/left_in</item>
        <item name="android:activityCloseExitAnimation">@anim/right_out</item>
</style>

注意需要继承自 @android:style/Animation.Activity。具体这4个属性什么意思呢?假设我们有 2 个 Activity,分别是 A1 和 A2:

  • 当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation
  • 当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation
  • 当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation
  • 当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation

结合上面我讲的情况,在脑海中想象一下,再结合属性的名字,就很容易理解了!


然后在你程序的theme里面定义如下

<style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="android:windowAnimationStyle">@style/Animation_Activity</item>
</style>
如果只是想用一次,则是在activity跳转时添加如下代码

overridePendingTransition(R.anim.zoom_in, R.anim.zoom);

这句话一定要在finish()之后,否则不会生效(另外,如果你手机的窗口动画关闭的话,也是没有动画效果的)。

//R.anim.zoom_in, R.anim.zoom为动画文件

应用到对应 Activity

<activity
    android:name="info.feelyou.demo.A2"
    android:theme="@style/AppTheme" >
</activity>

在我的项目中,我发现退出动画无效,可能是手机问题吧,下面是解决方案。
private int activityCloseEnterAnimation, activityCloseExitAnimation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

TypedArray activityStyle = getTheme().obtainStyledAttributes(new int[]{android.R.attr.windowAnimationStyle});
int windowAnimationStyleResId = activityStyle.getResourceId(0, 0);
activityStyle.recycle();
activityStyle = getTheme().obtainStyledAttributes(windowAnimationStyleResId, new int[]{android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation});
activityCloseEnterAnimation = activityStyle.getResourceId(0, 0);
activityCloseExitAnimation = activityStyle.getResourceId(1, 0);
activityStyle.recycle();
}

@Override
public void finish() {
super.finish();
overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation);
}

只需要两步就能解决退出动画无效。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值