如果是應用全局的動畫,則在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);
}
隻需要兩步就能解決退出動畫無效。