重新淡入淡出动画无法正常工作codenameone

重新淡入淡出动画无法正常工作codenameone,codenameone,Codenameone,淡入动画不工作。串行调用也不起作用。如果只添加一个淡入淡出组件,则问题仍然存在。下面是关于它在模拟器中的外观的视频 更新1: 以下代码在模拟器中工作,但在实际设备中,apple组件淡入良好,其他组件也存在相同的问题 bb.setX(-bb.getWidth()); bb.setVisible(true); bb.getParent().animateHierarchyAndWait(2500); Display.getInstance().callSeriall

淡入动画不工作。串行调用也不起作用。如果只添加一个淡入淡出组件,则问题仍然存在。下面是关于它在模拟器中的外观的视频

更新1: 以下代码在模拟器中工作,但在实际设备中,apple组件淡入良好,其他组件也存在相同的问题

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