天天看点

Activity的切换动画

如果是应用全局的动画,则在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);

}

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

继续阅读