我有一个循环向管理器添加字段,我试图延迟每个字段绘制到屏幕上之间的时间。我一直在尝试下面的代码,但它只是在所有字段都添加到其中后才绘制管理器。 这可能吗?
manager.add(field);
manager.invalidate();//force a repaint of the manager
Thread.sleep(1000);
谢谢
最佳答案
Invalidate 并不一定会强制绘制,它只是表示在下一次绘制时需要重新绘制 Field(或您的情况下的 Manager)。这是一个微妙的差异,但可能会引起困惑。您可能想要尝试的是调用 Screen.doPaint() ,这将强制重新绘制整个屏幕。另外,将 sleep() 放在事件线程中不会有帮助,因为绘画也是在同一个线程上完成的。
如果您尝试在第二次延迟的情况下按顺序向管理器添加字段,则应将此逻辑放入其自己的线程中并执行 synchronized(UiApplication.getEventLock()){//add fields}
当你调用 manager.add(field) 时。然后你可以调用你的 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();
}
绘制应该在 add() 之后发生,但如果没有发生,您也可以调用 yourScreen.doPaint()
关于java - 延迟显示管理器中的字段(黑莓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6070446/