我有一個循環向管理器添加字段,我試圖延遲每個字段被繪製到屏幕上的時間。我一直在下面的代碼嘗試,但它只是當所有的領域已被添加到它的經理。 這可能嗎?延遲顯示管理器中的字段(黑莓)
manager.add(field);
manager.invalidate();//force a repaint of the manager
Thread.sleep(1000);
感謝
我有一個循環向管理器添加字段,我試圖延遲每個字段被繪製到屏幕上的時間。我一直在下面的代碼嘗試,但它只是當所有的領域已被添加到它的經理。 這可能嗎?延遲顯示管理器中的字段(黑莓)
manager.add(field);
manager.invalidate();//force a repaint of the manager
Thread.sleep(1000);
感謝
的Invalidate不一定強制油漆,它只是說,在接下來的塗料領域(或經理你的情況)需要重新繪製。這是一個微妙的差異,但它可能造成混亂。你可能想要嘗試的是調用Screen.doPaint()
,這將強制整個屏幕重繪。另外,將sleep()放入Event線程中也無濟於事,因爲繪畫也是在同一個線程上完成的。
如果您嘗試使用第二次延遲向您的管理器順序添加字段,則應該將此邏輯放入其自己的Thread中,並在調用manager.add(field)時執行synchronized(UiApplication.getEventLock()){//add fields}
。然後你可以打電話給你的Thread.sleep(1000)
正確顯示延遲。另外,就像一些增加的信息一樣,調用add()
固有地導致invalidate()調用,所以你不需要添加它。這裏的第二延遲一個簡單的例子,在加入
protected void addDelayedFields() {
Thread t = new Thread(new Runnable() {
public void run() {
for(int i=0;i<SOME_LIMIT;i++) {
synchronized(UiApplication.getEventLock()) {
manager.add(new LabelField(i.toString());
}
try{
Thread.sleep(1000);
}
catch(Exception e){ }
}
}
});
t.start();
}
內畫)加(後應該發生,但如果沒有,你也可以撥打電話到yourScreen.doPaint()
感謝偉大的答案。你爲什麼在這裏同步 - 同步(UiApplication.getEventLock()){ ? – 2011-05-20 14:08:09
因爲您需要向經理添加字段。 – Swati 2011-05-20 14:57:38