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" />