重新淡入淡出动画无法正常工作codenameone
淡入动画不工作。串行调用也不起作用。如果只添加一个淡入淡出组件,则问题仍然存在。下面是关于它在模拟器中的外观的视频 更新1: 以下代码在模拟器中工作,但在实际设备中,apple组件淡入良好,其他组件也存在相同的问题重新淡入淡出动画无法正常工作codenameone,codenameone,Codenameone,淡入动画不工作。串行调用也不起作用。如果只添加一个淡入淡出组件,则问题仍然存在。下面是关于它在模拟器中的外观的视频 更新1: 以下代码在模拟器中工作,但在实际设备中,apple组件淡入良好,其他组件也存在相同的问题 bb.setX(-bb.getWidth()); bb.setVisible(true); bb.getParent().animateHierarchyAndWait(2500); Display.getInstance().callSeriall
bb.setX(-bb.getWidth());
bb.setVisible(true);
bb.getParent().animateHierarchyAndWait(2500);
Display.getInstance().callSerially(() -> {
Display.getInstance().callSerially(() -> {
appleLabel.setVisible(true);
appleContainer.animateHierarchyFadeAndWait(2000, 0);
Display.getInstance().callSerially(() -> {
whiteBgLabel.setVisible(true);
whiteBgLabel.getParent().animateLayoutFadeAndWait(2000, 0);
Display.getInstance().callSerially(() -> {
question.setVisible(true);
yes.setVisible(true);
no.setVisible(true);
quizContainer.animateLayoutFadeAndWait(2000, 0);
});
});
});
});
更新2:
以下代码在模拟器和设备中都不起作用
bb.setX(-bb.getWidth());
bb.setVisible(true);
bb.getParent().animateHierarchyAndWait(2500);
Display.getInstance().callSerially(() -> {
appleLabel.setVisible(true);
appleContainer.animateHierarchyFadeAndWait(2000, 0);
});
Display.getInstance().callSerially(() -> {
whiteBgLabel.setVisible(true);
whiteBgLabel.getParent().animateLayoutFadeAndWait(2000, 0);
});
Display.getInstance().callSerially(() -> {
question.setVisible(true);
yes.setVisible(true);
no.setVisible(true);
quizContainer.animateLayoutFadeAndWait(2000, 0);
});
更新3:
用flushAnimation替换串行调用在模拟器和设备中不起作用
bb.setX(-bb.getWidth());
bb.setVisible(true);
bb.getParent().animateHierarchyAndWait(2500);
Display.getInstance().callSerially(() -> {
Display.getInstance().callSerially(() -> {
appleLabel.setVisible(true);
appleContainer.animateHierarchyFadeAndWait(2000, 0);
f.getAnimationManager().flushAnimation(() -> {
whiteBgLabel.setVisible(true);
whiteBgLabel.getParent().animateLayoutFadeAndWait(2000, 0);
f.getAnimationManager().flushAnimation(() -> {
question.setVisible(true);
yes.setVisible(true);
no.setVisible(true);
quizContainer.animateLayoutFadeAndWait(2000, 0);
});
});
});
});
在调用中连续添加刷新动画在设备中不起作用
bb.setX(-bb.getWidth());
bb.setVisible(true);
bb.getParent().animateHierarchyAndWait(2500);
Display.getInstance().callSerially(() -> {
Display.getInstance().callSerially(() -> {
appleLabel.setVisible(true);
appleContainer.animateHierarchyFadeAndWait(2000, 0);
Display.getInstance().callSerially(() -> {
f.getAnimationManager().flushAnimation(() -> {
whiteBgLabel.setVisible(true);
whiteBgLabel.getParent().animateLayoutFadeAndWait(2000, 0);
f.getAnimationManager().flushAnimation(() -> {
question.setVisible(true);
yes.setVisible(true);
no.setVisible(true);
quizContainer.animateLayoutFadeAndWait(2000, 0);
});
});
});
});
});
更新4:
Form f = new Form(new BoxLayout(BoxLayout.Y_AXIS));
Label a = new Label(apple);
Label b = new Label(apple);
Label c = new Label(apple);
Label d = new Label(apple);
a.setVisible(false);
b.setVisible(false);
c.setVisible(false);
d.setVisible(false);
f.add(FlowLayout.encloseCenter(a));
f.add(FlowLayout.encloseCenter(b));
f.add(FlowLayout.encloseCenter(c));
f.add(FlowLayout.encloseCenter(d));
f.show();
a.setVisible(true);
a.getParent().animateLayoutFadeAndWait(2000, 0);
Display.getInstance().callSerially(() -> {
Display.getInstance().callSerially(() -> {
b.setVisible(true);
b.getParent().animateLayoutFadeAndWait(2000, 0);
f.getAnimationManager().flushAnimation(() -> {
Display.getInstance().callSerially(() -> {
c.setVisible(true);
c.getParent().animateLayoutFadeAndWait(2000, 0);
Display.getInstance().callSerially(() -> {
d.setVisible(true);
d.getParent().animateLayoutFadeAndWait(2000, 0);
});
});
});
});
});
这对我来说不太好。我建议将标签本身设置为visible false,而不仅仅是它们的父容器,因为从标签本身触发的重绘可能会通过
此外,您还可以尝试在show listener中触发动画,而不仅仅是按顺序调用
,这应该会给窗体足够的时间来显示。这对我来说运行不太好。我建议将标签本身设置为visible false,而不仅仅是它们的父容器,因为从标签本身触发的重绘可能会通过
您还可以尝试在show listener中触发动画,而不仅仅是
callSerially
,这应该会给表单足够的时间来显示。您还可以将图像附加到问题,以便我可以运行它吗?您有许多未定义的变量,并且可以访问未编译的图像。请提供编译和解释哪幅图像的代码。。。例如树…好的,我也添加了变量和所有代码。现在应该可以编译了。请看有关该问题的视频。对于tree label,之前有一个树图像,由于我发现gif很麻烦,所以我没有将白色bg图像放在树上。您是否可以将图像附加到问题上,以便我可以运行它?您有许多未定义的变量,并且可以访问未编译的图像。请提供编译和解释哪幅图像的代码。。。例如树…好的,我也添加了变量和所有代码。现在应该可以编译了。请看有关该问题的视频。对于树标签,之前有一个树图像,因为我发现gif很麻烦,所以我把白色的bg图像放在了树上。代码没有编译吗?它确实适合我。你想让我分享这个项目吗?起初,我通过将标签可见性设置为false进行测试,它不起作用,所以我将其父级可见性设置为false,但结果相同。我把callSerially放在show listener里面(不起作用),还尝试了showlistener,但没有连续调用,但没有编译好,但我没有看到苹果,只看到闪烁的一部分。很多事情都不清楚你做了什么,比如图像的分辨率等等,因为代码有点冗长,所以很难理解。我建议将所有不应显示的内容设置为“可见”假。在这个测试用例中,一次发生的事情太多了,所以我们都很难理解具体的问题。我建议删除所有内容,直到找到最窄的测试用例。好的,我已经从上述问题中清除了所有不必要的内容,并保留了两个褪色的标签。如果你没有看到苹果褪色,你可以看到白色背景褪色。它们都有相同的问题(即在褪色前闪烁)。运行2-3次,因为有时它们会正常褪色。白色背景位于苹果标签后面,但只有在苹果标签褪色完成后才会褪色,所以我使用了分层布局:appleLabel.setVisible(true);animateHierarchyFadeAndWait(2000,0);Display.getInstance().callSerialy(()->{whiteBgLabel.setVisible(true);whiteBgLabel.getParent().animateLayoutFadeAndWait(3000,0);})代码>只需在包装好的代码之后执行该操作,并在另一个callSerially中包装该代码。这让EDT在调用之间刷新。代码没有编译吗?它确实适合我。你想让我分享这个项目吗?起初,我通过将标签可见性设置为false进行测试,它不起作用,所以我将其父级可见性设置为false,但结果相同。我把callSerially放在show listener里面(不起作用),还尝试了showlistener,但没有连续调用,但没有编译好,但我没有看到苹果,只看到闪烁的一部分。很多事情都不清楚你做了什么,比如图像的分辨率等等,因为代码有点冗长,所以很难理解。我建议将所有不应显示的内容设置为“可见”假。在这个测试用例中,一次发生的事情太多了,所以我们都很难理解具体的问题。我建议删除所有内容,直到找到最窄的测试用例。好的,我已经从上述问题中清除了所有不必要的内容,并保留了两个褪色的标签。如果你没有看到苹果褪色,你可以看到白色背景褪色。它们都有相同的问题(即在褪色前闪烁)。运行2-3次,因为有时它们会正常褪色。白色背景位于苹果标签后面,但只有在苹果标签褪色完成后才会褪色,所以我使用了分层布局:appleLabel.setVisible(true);animateHierarchyFadeAndWait(2000,0);Display.getInstance().callSerialy(()->{whiteBgLabel.setVisible(true);whiteBgLabel.getParent().animateLayoutFadeAndWait(3000,0);})代码>只需在包装好的代码之后执行该操作,并在另一个callSerially中包装该代码。这可以让EDT在两次通话之间刷新。
Form f = new Form(new BoxLayout(BoxLayout.Y_AXIS));
Label a = new Label(apple);
Label b = new Label(apple);
Label c = new Label(apple);
Label d = new Label(apple);
a.setVisible(false);
b.setVisible(false);
c.setVisible(false);
d.setVisible(false);
f.add(FlowLayout.encloseCenter(a));
f.add(FlowLayout.encloseCenter(b));
f.add(FlowLayout.encloseCenter(c));
f.add(FlowLayout.encloseCenter(d));
f.show();
a.setVisible(true);
a.getParent().animateLayoutFadeAndWait(2000, 0);
Display.getInstance().callSerially(() -> {
Display.getInstance().callSerially(() -> {
b.setVisible(true);
b.getParent().animateLayoutFadeAndWait(2000, 0);
f.getAnimationManager().flushAnimation(() -> {
Display.getInstance().callSerially(() -> {
c.setVisible(true);
c.getParent().animateLayoutFadeAndWait(2000, 0);
Display.getInstance().callSerially(() -> {
d.setVisible(true);
d.getParent().animateLayoutFadeAndWait(2000, 0);
});
});
});
});
});