在Android中从上一个Activity中淡入新的Activity

19

我目前正在开发一款安卓应用程序,但是我在闪屏活动方面遇到了一些问题。我希望我的主活动从闪屏活动淡入,而不是从黑屏淡入。由于我的闪屏和主活动使用相同的背景图像,因此如果我使用一个淡入/淡出组合,过渡期间背景有点模糊。

这里的想法是我有两个版本的标志:普通和发光。我希望我的主要活动淡入,以便我的发光标志超过我的普通标志,造成一个漂亮的“开启”效果。下面的代码从黑屏淡入,这不是理想的。

/**
 * Pause Activity
 */
@Override
protected void onPause()
{
    super.onPause();
    finish();
    overridePendingTransition(android.R.anim.fade_in, 0);
}

编辑:

创建自己的淡出动画以保留1.0 alpha值(从1.0到1.0),并将android:fillAfter="true"添加到我的闪屏动画集中,解决了这个问题。

2个回答

39

这与事物的顺序有关。下面是一个例子,它将在3秒后淡出并进入下一个活动:

new Handler().postDelayed(new Runnable() {
  @Override
  public void run() {

    //Create an intent that will start the main activity.
    Intent mainIntent = new Intent(SplashActivity.this, MainMenuActivity.class);
    SplashActivity.this.startActivity(mainIntent);

    //Finish splash activity so user cant go back to it.
    SplashActivity.this.finish();

    //Apply splash exit (fade out) and main entry (fade in) animation transitions.
    overridePendingTransition(R.anim.mainfadein, R.anim.splashfadeout);
  }
}, 3000);

请注意,这里有两个动画:淡入和淡出。

mainfadein.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:fromAlpha="0.0" 
        android:toAlpha="1.0" 
        android:duration="700" />

splashfadeout.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:interpolator="@android:anim/decelerate_interpolator"
        android:zAdjustment="top" 
        android:fromAlpha="1.0" 
        android:toAlpha="0.0" 
        android:duration="700" />

嗯...这与我的当前代码存在相同的问题,如果我省略fade_out,则会进入黑屏状态,然后再淡入,如果我保留它,则看起来有点奇怪。我尝试实现自己的fade_out,从1.0 alpha过渡到1.0 alpha,但原始标志仍然在新标志淡入之前被替换。这里的目标是“覆盖”闪屏活动与主要活动,以便在其他视图出现时看起来像标志开始发光。 - Karai17
2
很高兴听到,我还添加了 XML 以供未来的访问者使用。因此,如果在闪屏淡出时我们将 android:fillAfter="true" 和 alpha 从 1.0 到 1.0 设置,我们就可以得到所谓的交叉淡入淡出效果。好好知道! - Lumis
1
淡入/淡出动画已经在Android SDK中定义好了,还有更多的动画可以使用。http://developer.android.com/reference/android/R.anim.html - Sufian
1
@Karai17 你是如何解决淡入之前的黑屏问题的? - android developer

34
我建议不要使用经典的交叉淡化效果,而是在没有动画的情况下显示新的Activity,并将当前的Activity淡出。这样看起来更加清晰,解决了一些小问题,比如当您从后台打开应用程序时,可以看到启动器/底层应用程序,而动画正在开始时。 my_splash_fade_out.xml
<?xml version="1.0" encoding="utf-8"?>

<alpha
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="750"
    android:fromAlpha="1.0"
    android:interpolator="@android:interpolator/accelerate_cubic"
    android:startOffset="250"
    android:toAlpha="0.0"
    android:zAdjustment="top" />

我在这里添加了一个startOffset,给新创建的Activity一些额外的启动时间,因为它比较耗费资源。 MySplashActivity.java
...
startActivity( ... );
finish();
overridePendingTransition( 0, R.anim.screen_splash_fade_out );

预览

预览动画


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接