2016-09-01 4 views
0

In Codename One, ich habe einen einfachen Chat wie UI und möchte Nachrichten (Labels) mit animateLayout hinzufügen. Es funktioniert gut, wenn Zeit zwischen den Nachrichten ist oder wenn die Zeit für die Animation klein ist, aber wenn zwei Animationen sich überlappen, ist die zweite Komponente nicht animiert. Hier ist der Code, den ich versucht habe (habe dies in neuen Kodenamen einer Projektstart-Methode):Codename eine gleichzeitige Animationen?

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(); 

Ich erwartete, dass animateLayout zu animateLayoutAndWait ändert dies lösen, aber es kam nicht. Ich habe auch die alte Problemumgehung versucht:

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(); 

wo animateLock ist ein Feld der Hauptklasse. Ich habe auch versucht, das Hinzufügen in Display.getInstance(). CallSerial (() -> {Code hier}), aber es hat auch nicht funktioniert. Wie gehe ich mit gleichzeitigen Animationen um?

Antwort

1

Sie sollten AnimationManager.flushAnimation verwenden, um Ihre Animation zu posten. Dadurch wird die Animation ausgeführt, wenn alle anderen Animationen beendet sind. Das sollte den Konflikt umgehen.

+0

form.getAnimationManager(). FlushAnimation() hat den Job gemacht! –

+0

FYI du hättest den obigen Code auch mit 'animateLayoutAndWait()' reparieren können. –