Android开发笔记-转场动画(从下往上)

2,199 阅读1分钟
  • 为了避免动画切换时有黑屏效果,采取两种方法

第一种,采用全局主题,所有界面公用这个动画效果

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/bg_color</item>
        <item name="colorPrimaryDark">@color/bg_color</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowAnimationStyle">@style/AppSlide</item>
    </style>


    <style name="AppSlide" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/slide_top_in</item>
        <item name="android:activityOpenExitAnimation">@anim/out_activity</item>
        <item name="android:activityCloseEnterAnimation">@anim/in_activity_close</item>
        <item name="android:activityCloseExitAnimation">@anim/slide_top_bottom</item>
    </style>

全局使用这个主题

第二种,对于局部使用转场动画的界面,使用如下

  • 在onCreate()方法中
 overridePendingTransition(R.anim.slide_top_in, R.anim.out_activity)
  • 在onFinish()方法中
  overridePendingTransition(R.anim.out_activity, R.anim.slide_top_bottom)
  • 动画xml文件

in_activity_close

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:fromYDelta="0%"
        android:toYDelta="0%" />
</set>

out_activity

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:fromYDelta="0%"
        android:toYDelta="0%"
        />
</set>

slide_top_bottom

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="0.0"
        android:toYDelta="100%p" />
</set>

slide_top_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
</set>