如果是应用全局的动画,则在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);
}
只需要两步就能解决退出动画无效。