动画结束后如何自动切换到另一个活动

时间:2016-02-16 22:34:06

标签: android android-intent android-animation

我正在尝试在Android Studio中进行启动画面。我有一个想要淡出的图像(动画)。然后,在动画结束后,我希望应用程序自动切换到主活动。使用我当前的代码,主活动将直接显示,而不首先通过动画。我不明白为什么。我更新了Android Manifest以指定我希望启动我的Splash Activity。仍然没有工作:

public class Splash extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        fade();
    }

    public void fade() {
        ImageView logo = (ImageView)findViewById(R.id.logo);
        logo.animate().alpha(0f).setDuration(1700);
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }
}

但是,如果我删除最后2行(关于Intent),则会显示我的动画。因此,好像Intent让Android完全绕过了我的动画。

4 个答案:

答案 0 :(得分:0)

当您启动动画时,这不会导致代码在动画完成之前停止。相反,动画的每个帧都会随着时间的推移而安排。

animate()返回ViewPropertyAnimator,您应该使用AnimatorListener注册setListener()。当侦听器触发onAnimationEnd()时,请调用startActivity继续。

logo.animate().alpha(0f).setDuration(1700).setListener(new AnimatorListener() {
    // implement all the method with empty bodies, but this one is important:
    public void onAnimationEnd(Animator animation) {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }
};

答案 1 :(得分:0)

看起来你可以像这样设置动画监听器:

public void fade() {
    ImageView logo = (ImageView)findViewById(R.id.logo);
    ViewPropertyAnimator anim = logo.animate();

    anim.setListener(new Animator.AnimatorListener() {

        @Override
        public void onAnimationStart(Animator animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationRepeat(Animator animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationEnd(Animator animation) {
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);
            startActivity(intent);
        }

        @Override
        public void onAnimationCancel(Animator animation) {
            // TODO Auto-generated method stub

        }
    });
    anim.alpha(0f).setDuration(1700).start();
}

然而,请注意,制作像这样的专门Splash活动是不赞成的。 对于“正确”的方法,see here....

答案 2 :(得分:0)

您可以在 SplashActivity onCreate()方法中尝试此操作:

ImageView logo = (ImageView)findViewById(R.id.logo);
logo.animate().alpha(0f).setDuration(1700);

new Handler(Looper.getMainLooper()).postDelayed(new Runnable()
{ @Override
  public void run()
  {
      Intent intent = new Intent(this, MainActivity.class);
      startActivity(intent);
  }
},2000) ;

这将显示您的动画,2秒后,将导航到MainActivity。

此外,自引入 MaterialTheme 以来,您可以使用品牌启动屏幕,而不是创建SplashScreen。它实现起来非常简单,您可以参考this article by Antonio Leiva.

答案 3 :(得分:0)

ObjectAnimator fade = ObjectAnimator.ofFloat(logo, View.ALPHA, 0);
fade.setDuration(1700);
fade.addListener(new AnimatorListener() {
    ...
    @Override 
    public void onAnimationEnd(Animator animation) {
        Intent intent = new Intent(Splash.this, MainActivity.class);
        startActivity(intent); 
    }
    ...
});