修改进入Activity的动画

前言

有两种方式来修改动画,一种是通过修改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。

Android1.mp4 (199.78KB)

exitAnim是第二个参数,是指该activity进入其它activity时的动画,比如这句话写在MainActivity,就是MainActivity进入其它activity时的动画,动画上展示的是MainActivity。

Android2.mp4 (370.12KB)
源码:

/**
     * 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) {
        }
    }

发布了21 篇原创文章 · 获赞 1 · 访问量 877

猜你喜欢

转载自blog.csdn.net/qq_33401954/article/details/105246143