我正在尝试在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完全绕过了我的动画。
答案 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);
}
...
});