2016-09-01 3 views
0

Codename Oneでは、私はUIのような簡単なチャットを持っており、animateLayoutを使ってメッセージ(ラベル)を追加したいと思っています。メッセージ間に時間がある場合、またはアニメーションの時間が短い場合、2つのアニメーションが重なった場合、2番目のコンポーネントはアニメートされません。ここで私がしようとしているコード(新しいコードネームのプロジェクトの開始方法でこれを置く)です:コードネームは1つの同時アニメーションですか?

Form hi = new Form("Hi World"); 
    hi.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); 
    Button button = new Button("Add"); 
    Label label = new Label("Status"); 

    button.addActionListener((actionEvent) -> { 
     hi.getContentPane().add("asd"); 
     hi.getContentPane().animateLayout(3000); 
    }); 

    hi.add(button); 
    hi.show(); 

私はanimateLayoutAndWaitにanimateLayoutを変更すると、この問題を解決することが期待が、それはしませんでした。私はまた、古い回避策を試しました:

Form hi = new Form("Hi World"); 
    hi.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); 
    Button button = new Button("Add"); 
    Label label = new Label("Status"); 

    button.addActionListener((actionEvent) -> { 
     if(!animateLock) { 
      animateLock = true; 
      hi.getContentPane().add("asd"); 
      hi.getContentPane().animateLayout(3000); 
      animateLock = false; 
     } 
    }); 

    hi.add(button); 
    hi.show(); 

ここで、animateLockはメインクラスのフィールドです。また、Display.getInstance()。callSerially(() - > {code here})で追加をラップしようとしましたが、機能しませんでした。 並行アニメーションを処理するにはどうすればよいですか?

答えて

1

AnimationManager.flushAnimationを使用してアニメーションを投稿する必要があります。これにより、他のすべてのアニメーションが終了したときにアニメーションが実行されます。それは紛争を回避するはずです。

+0

form.getAnimationManager()。flushAnimation()ジョブを実行しました! –

+0

また、上記のコードを 'animateLayoutAndWait()'で修正することもできます。 –

関連する問題