【问题标题】:How to fade out an Activity's UI, and fade in another Activity's UI?如何淡出一个 Activity 的 UI,并淡入另一个 Activity 的 UI?
【发布时间】:2018-09-08 10:38:02
【问题描述】:

目前我有两个AppCompatActivity

  1. 主要的,仅显示启动器 UI(即:只有我的应用程序的徽标,以大尺寸显示)(ConstraintLayout

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

我想在 2 秒内淡出我的启动器 UI。在这个动画之后,我将启动第二个Activity,必须淡入。

我应该怎么做?

我在ConstraintLayoutDrawerLayout 中寻找了一些fading-infading-out,但我没有找到它们。这个想法是在 main 的 onCreate 和其他 Activity 的事件处理程序中调整它们的值(对于 main 的 ConstraintLayout,以及另一个的 DrawerLayoutConstraintLayout)。

【问题讨论】:

标签: android android-layout android-animation


【解决方案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();
}

在创建时调用它:

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

显然,您想将初始 alpha 设置为 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);
....

【讨论】:

  • "淡出当前活动" :我尝试这样做,但动画没有执行。可以肯定的是,我想用一段时间来测试这个动画。如何在 XML 文件中指定后者?
  • 我添加了overridePendingTransition(R.anim.fade_out_home_activity, 0);,但我的主要活动仍然没有淡入:-/我可以给你看整个代码吗?
  • overridePendingTransition(R.anim.fade_out_home_activity, 0): 0 不是任何 alpha 值。所以,使用这个: overridePendingTransition(R.anim.fade_in_other_activity, R.anim.fade_out_home_activity);显然首先创建动画; fade_in 应该是第一个参数
  • 您现在可以制作过渡动画了吗? (正如你所说,0 表示没有动画,但它会产生一些紧张的效果..)
  • 据我所知,MainActivity 不能在 oncreate 中淡出。但是您可以在开始另一个活动之前通过 overridePendingTransition(R.anim.fade_in_other_activity, R.anim.fade_out_home_activity) 将其淡出,我之前告诉过您。它会淡出 mainactivity 并淡入意图
猜你喜欢
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多