需求:启动欢迎页面SplashActivity(带有启动动画),启动动画一旦结束,自动跳转到MainActivity。
前面初始化view的代码:
/**初始化view*/
private void initView() {
rLayout=(RelativeLayout) findViewById(R.id.rl_splash_animContainer);
}
接下来用以下3种方式实现跳转,分别分析:
第一种:Animation animation=AnimationUtils.loadAnimation(this, R.anim.splash_anim_1);
rLayout.startAnimation(animation);//异步返回(发起任务的方法瞬间结束,但是任务什么时候结束根本不知道)
/*这种方法看不到动画,一下就跳到MainActivity**/
startActivity(new Intent(this,MainActivity.class));
finish();
第二种:Animation animation=AnimationUtils.loadAnimation(this, R.anim.splash_anim_1);
rLayout.startAnimation(animation);//异步返回(发起任务的方法瞬间结束,但是任务什么时候结束根本不知道)
/*这种方法能看到动画,但是延迟时间不好控制,主要是当修改了动画时间后,容易忘记修改延迟时间* */
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(SplashActivity.this,MainActivity.class));
finish();
}
}, 4000);
第三种:Animation animation=AnimationUtils.loadAnimation(this, R.anim.splash_anim_1);
rLayout.startAnimation(animation);//异步返回(发起任务的方法瞬间结束,但是任务什么时候结束根本不知道)
//以下这种给动画设置监听器的方式,能更好地保证用户所需的顺序
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
startActivity(new Intent(SplashActivity.this,MainActivity.class));
finish();
}
});