天天看點

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);

}

隻需要兩步就能解決退出動畫無效。

繼續閱讀