Android Activity動畫屬性簡介
在Android當中 設置activity的動畫 需要復寫 android:windowAnimationStyle這個屬性
我們自定義一個動畫樣式來繼承 @android:style/Animation(Base style for animations. This style specifies no animations)
這個樣式是Android操作系統提供的 沒用動畫的樣式 我們定義其中的4個屬性還設置我們想要的效果
android:activityOpenEnterAnimation 一個activity創建進入的效果。
android:activityOpenExitAnimation 一個activity還沒有finish()下退出效果, 比如有倆個activity A與B 首先啟動A 然后再啟動B 那么A還沒有finish() 這時A的退出效果。
android:activityCloseEnterAnimation 表示上一個activity返回進入效果 比如有倆個activity A與B B在最上面,B退出(finish)后 A重新進入的效果。
android:activityCloseExitAnimation 表示的是activity finish()之后的效果 比如有倆個activity A與B B退出后會被finish() 那么B的退出效果在這定義。
下面寫一個activity左右滑動的效果。
<style name="AppTheme" parent="@android:style/Theme">
<item name="android:windowAnimationStyle">@style/activityAnimation</item>
</style>
<style name="activityAnimation" parent="@android:style/Animation">
<item name="android:activityOpenEnterAnimation">@anim/slide_right_in</item>
<item name="android:activityOpenExitAnimation">@anim/slide_left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_left_in</item>
<item name="android:activityCloseExitAnimation">@anim/slide_right_out</item>
</style>
slide_left_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:duration="300" android:fromXDelta="-100.0%p" android:toXDelta="0.0" />
</set>
slide_left_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:duration="300" android:fromXDelta="0.0" android:toXDelta="-100.0%p" />
</set>
slide_right_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:duration="300" android:fromXDelta="100.0%p" android:toXDelta="0.0" />
</set>
slide_right_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:duration="300" android:fromXDelta="0.0" android:toXDelta="100.0%p" />
</set>
上面是通寫配置文件的方式來定義activity的動畫效果,我們還可以通過代碼的方式來指定動畫效果。
overridePendingTransition(int enterAnim, int exitAnim)
all immediately after one of the flavors of startActivity(Intent)
or finish()
to specify an explicit transition animation to perform next.
這個方法可以放在startActivity(intent)和finish()方法的后面。
(A啟動B A不動 B從下面滑入)
第一個參數是進入activity的動畫,第二個參數是當前activity退出時的動畫。
Intent intent = new Intent(NavigationDemo.this, AnimationActivity.class); startActivity(intent); overridePendingTransition(R.anim.slide_in_from_bottom, R.anim.hold);
slide_in_from_bottom.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_longAnimTime" android:fromYDelta="100%p" android:toYDelta="0" />
hold.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_longAnimTime" android:fromXDelta="0" android:interpolator="@android:anim/accelerate_interpolator" android:toXDelta="0" />
(A與B B退出時從下面滑出)
第一個參數指定A進入時的效果,為0表示沒有動畫, 第二個參數表示當前B退出時的動畫。
@Override public void finish() { super.finish(); overridePendingTransition(0, R.anim.slide_out_to_bottom); } }
slide_out_to_bottom.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_longAnimTime" android:fromYDelta="0" android:toYDelta="100%p" />