Activity自定义过渡动画

Activity自定义过渡动画,如下图所示:

 

要想实现上面的效果,先明白下面四个概念:

以第一个 activity 进入第二个 activity 为例;

activityOpenEnterAnimation :第二个 activity 的进入动画  (第一个 activity 进入第二个 activity)

activityOpenEnterAnimation :第一个 activity 的退出动画 (第一个 activity 进入第二个 activity)

activityCloseEnterAnimation :第一个 activity 的进入动画 (第二个 activity 返回第一个 activity)

activityCloseExitAnimation :第二个 activity 的退出动画  (第二个 activity 返回第一个 activity)

 

上面的概念理解完毕,再了解 translate 的几个属性:

duration="200"   动画持续时间为200毫秒

fromXDelta="0"  动画从X轴坐标为0的地方开始

toXDelta="100%p" 动画以X轴屏幕最大处结束

 

除此之外,要了解屏幕的坐标系,它是以屏幕左上角为原点,往右是X轴正方向,往下是Y轴正方向,如下图:

 

下面来看代码,首先在styles 中自定义名字为 ActivityAnimation 的 style,代码如下:

    <style name="ActivityTheme" parent="@style/Theme.AppCompat.DayNight.NoActionBar">
        <item name="android:windowAnimationStyle">@style/ActivityAnimation</item>
    </style>

    <style name="ActivityAnimation" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/anim_open_enter</item>
        <item name="android:activityOpenExitAnimation">@anim/anim_open_exit</item>
        <item name="android:activityCloseEnterAnimation">@anim/anim_close_enter</item>
        <item name="android:activityCloseExitAnimation">@anim/anim_close_exit</item>
    </style>

 

anim_open_enter :
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator">
    <!-- 第一个activity到第二个activity -->
    <!-- 第二个activity进入动画 -->
    <translate
        android:duration="200"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
</set>

 

anim_open_exit :
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator">
    <!-- 第一个activity到第二个activity -->
    <!-- 第一个activity退出动画 -->
    <translate
        android:duration="200"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />
</set>

 

anim_close_enter :
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator">
    <!-- 第一个activity到第二个activity -->
    <!-- 第一个activity进入动画 -->
    <translate
        android:duration="200"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />
</set>

 

anim_close_exit :
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator">
    <!-- 第一个activity到第二个activity -->
    <!-- 第二个activity退出动画 -->
    <translate
        android:duration="200"
        android:fromXDelta="0"
        android:toXDelta="100%p" />
</set>

 

最后在 AndroidManifest.xml 文件中应用:

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/ActivityTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".AnimationActivity"/>

    </application>

这样就可以实现最上面的效果了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值