GWT:为什么延迟命令在LayoutPanel上的animate()之前执行?

GWT:为什么延迟命令在LayoutPanel上的animate()之前执行?,gwt,Gwt,我试图通过animate()和DeferredCommand了解事件循环的计时。我有一个LayoutPanel,左侧有一个导航列(如Outlook),然后屏幕的其余部分可以在两个面板之间垂直拆分之间切换,或者底部面板(拆分时)可以设置为填充屏幕的其余部分。我已经让它们之间的布局和基本动画正常工作,但我正试图用DeferredCommand延迟底部屏幕的大小调整。这样做的原因是,当底部面板从全屏切换到半屏时,我想在将底部面板缩小到一半后调整底部面板的大小。如果未发生这种情况,则底部面板将调整为半尺

我试图通过animate()和DeferredCommand了解事件循环的计时。我有一个LayoutPanel,左侧有一个导航列(如Outlook),然后屏幕的其余部分可以在两个面板之间垂直拆分之间切换,或者底部面板(拆分时)可以设置为填充屏幕的其余部分。我已经让它们之间的布局和基本动画正常工作,但我正试图用DeferredCommand延迟底部屏幕的大小调整。这样做的原因是,当底部面板从全屏切换到半屏时,我想在将底部面板缩小到一半后调整底部面板的大小。如果未发生这种情况,则底部面板将调整为半尺寸,同时仍全屏显示,然后进行动画制作

然而,这正是正在发生的事情,我试图用delferredcommand避免这种情况。因此,延迟命令似乎是在设置动画之前执行的

下面是代码片段

setWidgetTopHeight(...make top panel half size)
setWidgetTopHeight(...make lower panel half size, positioned halfway down)
animate(500); 
DeferredCommand.addCommand(new Command() {
    public void execute() {
         ...resize Widget inside lower Panel
    }
});
“动画”中正在调整大小的下部面板是一个围绕“延迟”命令中正在调整大小的实际小部件的流程面板。这可能是问题的一部分吗?

animate()由连续的多个ScheduledCommand(或等效命令)实现,即动画不会在浏览器事件循环的单个迭代中完成。请注意,GWT2.1中不推荐使用DeferredCommand-提供相同的功能。动画完成后执行动作的正确方法是使用:

animate()由连续数个ScheduledCommand(或等效命令)实现,即动画不会在浏览器事件循环的单个迭代中完成。请注意,GWT2.1中不推荐使用DeferredCommand-提供相同的功能。动画完成后执行动作的正确方法是使用:


感谢您的回答,但我们使用的是GWT2.0;有什么想法吗?是什么阻止你使用2.1?这是一个非常大的应用程序的一部分,我们还没有开始评估切换到2.1I的影响,结果只是使用了一个基本计时器,延迟与动画持续时间相同。可能不像AnimationCallback那样优雅地连接在一起,但它在2.0中工作。GWT2.0的LayoutPanel文档包括上面指定的方法。您遇到了什么问题?谢谢您的回答,但我们使用的是GWT2.0;有什么想法吗?是什么阻止你使用2.1?这是一个非常大的应用程序的一部分,我们还没有开始评估切换到2.1I的影响,结果只是使用了一个基本计时器,延迟与动画持续时间相同。可能不像AnimationCallback那样优雅地连接在一起,但它在2.0中工作。GWT2.0的LayoutPanel文档包括上面指定的方法。你有什么问题?
animate(500, new Layout.AnimationCallback() {
  @Override
  public void onAnimationComplete() {
    // Perform post-animation action.
  }

  @Override
  public void onLayout(Layout.Layer layer, double progress) {
    // Ignored.
  }
});