2016-09-01 76 views
0

在Codename One中,我有一個像UI這樣簡單的聊天,並希望使用animateLayout添加消息(標籤)。如果消息之間存在時間,或者動畫的時間很短,但是當兩個動畫重疊時,第二個組件不會生成動畫,它可以正常工作。這是我曾嘗試代碼(把這個新的代號爲一個項目的啓動方法):Codename一個並發動畫?

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

我預期改變animateLayout到animateLayoutAndWait會解決這個問題,但事實並非如此。我也嘗試了以前的解決方法:

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()'修復上面的代碼。 –