2017-11-28 14 views
1

にFormBするフォームAからの遷移、すなわち:コードネーム1 - コードネームつシミュレータ上で期待どおりに、次のコードが動作FormC

  • は、最初のフォーム(startForm)を示す
  • フェード第二の形態(emptyFormに)を2秒
  • 1秒間三フォームにフェード(loginForm)

ためしたがって、遷移時間は合計で3秒であるべきです。

しかし、実際のデバイスでは、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(); 
    } 
}); 

答えて

1

show()、これは良いアイデアではないようなので、順番にそれを呼び出して、非ブロッキングです。トランジションタイムの効果をカットしたり、衝突さえする可能性があります。

これを実現する方法は次のとおりです。

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

私はemptyForm.addShowListenerは()emptyForm.show()メソッドの前になければならないことをテストし、それ以外の場合はそのShowListenerが呼び出されることはありません。 –

+0

しかし、実際のデバイスではCommonTransitions.createFade(2000)が無視されるため、このソリューションは実際のデバイスでは機能しません。 –

+0

実際のデバイスはどれですか?起動時間が移行速度に影響する可能性があることに注意してください –

関連する問題