前言
有两种方式来修改动画,一种是通过修改activity主题,另一种则是通过重写overridePendingTransition方法。
一、修改主题实现
1.1 添加动画文件
在res目录下添加目录anim,目录下添加动画文件
slide_out_left.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="2000"
android:fromXDelta="-100%p"
android:toXDelta="0"/>
</set>
1.2 添加自定义主题
在valuse下的styles.xml中添加自定义主题:
<style name="Anim_fade" parent="android:Theme.NoTitleBar">
<item name="android:windowAnimationStyle">@style/fade</item>
</style>
<style name="TranSprat" parent="Anim_fade">
<item name="android:windowBackground">@color/colorPrimary</item>
<item name="android:windowIsTranslucent">true</item>
</style>
<style name="fade" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_out_left</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_left</item>
</style>
属性说明,具体效果自己动手实践理解
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的退出效果在这定义。 |
1.3 使用主题
在activity中使用该主题
<activity
android:theme="@style/TranSprat"
android:name=".FiveActivity">
</activity>
1.4 提示
使用这个方式时,可能会动画效果失效,因activity的启动模式和机型问题。
二、重写overridePendingTransition()实现
Intent intent = new Intent(FiveActivity.this,MainActivity.class);
intent.putExtra("exit", true);
startActivity(intent);
overridePendingTransition(R.anim.slide_out_left,R.anim.slide_in_left);
enterAnim是第一个参数,是指该activity进入其它activity时的动画,比如这句话写在MainActivity,就是MainActivity进入其它activity时的动画,动画上展示的其它activity。
exitAnim是第二个参数,是指该activity进入其它activity时的动画,比如这句话写在MainActivity,就是MainActivity进入其它activity时的动画,动画上展示的是MainActivity。
/**
* Call immediately after one of the flavors of {@link #startActivity(Intent)}
* or {@link #finish} to specify an explicit transition animation to
* perform next.
*
* <p>As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN} an alternative
* to using this with starting activities is to supply the desired animation
* information through a {@link ActivityOptions} bundle to
* {@link #startActivity(Intent, Bundle)} or a related function. This allows
* you to specify a custom animation even when starting an activity from
* outside the context of the current top activity.
*
* @param enterAnim A resource ID of the animation resource to use for
* the incoming activity. Use 0 for no animation.
* @param exitAnim A resource ID of the animation resource to use for
* the outgoing activity. Use 0 for no animation.
*/
public void overridePendingTransition(int enterAnim, int exitAnim) {
try {
ActivityTaskManager.getService().overridePendingTransition(
mToken, getPackageName(), enterAnim, exitAnim);
} catch (RemoteException e) {
}
}