Android 代号一-从FormA到FormB再到FormC的转换

Android 代号一-从FormA到FormB再到FormC的转换,android,ios,codenameone,Android,Ios,Codenameone,以下代码在Codename One模拟器上按预期工作,即: 显示第一个表单(startForm) 淡入第二种形态(清空形态)两秒钟 淡入第三种形式一秒钟(loginForm) 因此,转换持续时间总共应该是3秒 但在真正的设备上,第三种形式几乎立即显示出来。我的代码出了什么问题 // Transition from startForm to loginForm startForm.show(); startForm.setTransitionOutAnimator(CommonTransiti

以下代码在Codename One模拟器上按预期工作,即:

  • 显示第一个表单(startForm)
  • 淡入第二种形态(清空形态)两秒钟
  • 淡入第三种形式一秒钟(loginForm)
因此,转换持续时间总共应该是3秒

但在真正的设备上,第三种形式几乎立即显示出来。我的代码出了什么问题

// Transition from startForm to loginForm
startForm.show();
startForm.setTransitionOutAnimator(CommonTransitions.createFade(2000));
emptyForm.show();
emptyForm.setTransitionOutAnimator(CommonTransitions.createFade(1000));
UITimer.timer(2000, false, emptyForm, new Runnable() {
    @Override
    public void run() {
        loginForm.show();
    }
});
show()
是非阻塞的,所以像这样按顺序调用它不是一个好主意。它可以减少过渡时间效应,甚至发生碰撞

实现这一目标的方法是:

startForm.addShowListener(e -> {
   emptyForm.addShowListener(ee -> loginForm.show());
   emptyForm.show();
});

我测试了emptyForm.addShowListener()应该在emptyForm.show()方法之前,否则它的ShowListener将永远不会被调用。但是,这个解决方案在实际设备上对我不起作用,因为CommonTransitions.createFade(2000)被实际设备忽略。哪个真正的设备?请注意,启动时间可能会影响转换速度。为什么?启动时间是否以过渡速度计算?我接受你的回答,因为你对“addShowListener”的重要提示,然而模拟器和真实设备之间的衰减效果是不同的。是的,衰减一直令人惊讶地“具有挑战性”。我们没有明确计算启动时间,因为我们只是不知道它。在UI实际可见之前,操作系统会调用相当于
start()
方法的方法。