如何淡出一个Activity的UI,并淡入另一个Activity的UI?

时间:2018-09-08 10:38:02

标签: android android-layout android-animation

目前我有两个AppCompatActivity

  1. 主要的一个,仅显示启动器用户界面(即:只有我的应用徽标,以大尺寸显示)(ConstraintLayout

  2. 主页,同时显示抽屉导航菜单(DrawerLayout)和真实应用程序的UI(ConstraintLayout)。

我想在2秒内淡出启动器用户界面。播放完该动画后,我将开始第二个Activity,它必须淡入。

我应该怎么做?

我在fading-infading-out中寻找了一些ConstraintLayoutDrawerLayout,但没有找到。想法是在onCreate主体和其他Activity的事件处理程序中调整它们的值(对于主体ConstraintLayout以及DrawerLayout和{{ 1}}。

1 个答案:

答案 0 :(得分:1)

淡出当前活动:

在res / values中创建样式:

<style name="PageTransition.Activity" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@android:anim/fade_in</item>
    <item name="android:activityOpenExitAnimation">@android:anim/fade_out</item>
    <item name="android:activityCloseEnterAnimation">@android:anim/fade_out</item>
    <item name="android:activityCloseExitAnimation">@android:anim/fade_in</item>
</style>

然后按照您的活动风格,通常是MainActivity的Apptheme: 添加此行:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/one</item>
        <item name="colorPrimaryDark">@color/one</item>
        <item name="colorAccent">@color/colorAccent</item>
        name="android:windowAnimationStyle">@style/PageTransition.Activity</item>
    </style>

要延迟启动下一个活动的UI,请执行以下操作: 对于您的情况,您需要使用处理程序来延迟转换:

 private final int interval = 1000; // 1 Second
    private Handler handler = new Handler();
    private Runnable runnable = new Runnable() {
        public void run() {

        ValueAnimator animator1 = ValueAnimator.ofInt(10, 0);

        animator1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {


                float x = (Integer) valueAnimator.getAnimatedValue() / (float) 10;
                yourview.setAlpha(x);
            }
        });

        animator1.setDuration(500);
        animator1.start();
}

在oncreate上调用它:

handler.postAtTime(runnable, System.currentTimeMillis() + interval);
handler.postDelayed(runnable, 2000); //two seconds

很显然,您要将初始字母设置为0。 希望这会有所帮助!

编辑:

如果要自定义持续时间,请定义自己的淡入淡出动画...

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:interpolator/decelerate_quad"
    android:fromAlpha="startalpha" android:toAlpha="endalpha"
    android:duration="{YourDuration in ms}"/>

如果某些API的前一种方法失败,请在开始活动之前使用此方法:

...
overridePendingTransition(int enterAnim, int exitAnim);
startActivity(intent);
....