图像动画问题代号为一

时间:2015-12-09 17:17:29

标签: java codenameone

希望通过将徽标缩放到启动画面来为其设置动画。 到目前为止尝试了以下内容:

@Override
protected void postSpash1(Form f) {
    findLogoLabel(f).setPreferredW(findLogoLabel(f).getPreferredW() * 5);
    findAnimateContainer(f).animateLayoutAndWait(2000);
    findLogoLabel(f).setPreferredSize(null);
}

图像没有动画并扩大自身。然而,它在2秒后突然改变它的大小,这不是我正在寻找的。我想要缩放效果(img应该在一定程度上慢慢变大)

我也尝试了其他方法,但标签顺利地从上到下移动而不是bg img变大

findLogoLabel(f).setPreferredH(findLogoLabel(f).getPreferredH() * 3);
findAnimateContainer(f).animateLayoutAndWait(2000);
findLogoLabel(f).setPreferredSize(null);

PS:我在logoLabel(Label)中设置了bg图像,Animatecontainer是包含logoLabel的容器。

1 个答案:

答案 0 :(得分:0)

阻止API有些棘手,因为它们可能会与其他一些行为发生冲突,从而阻止当前调度线程的其余部分完成其工作。

您也可以在动画后设置null而不是之前...

所以在你的情况下这应该有效(使用旧的Java 5语法):

@Override
protected void postSpash1(final Form f) {
    findLogoLabel(f).setPreferredW(findLogoLabel(f).getPreferredW() * 5);
    Display.getInstance().callSerially(new Runnable() {
        public void run() {
          findLogoLabel(f).setPreferredSize(null);
          findAnimateContainer(f).animateLayoutAndWait(2000);
        }
    });
}

使用酷的Java 8 lambdas:

@Override
protected void postSpash1(final Form f) {
    findLogoLabel(f).setPreferredW(findLogoLabel(f).getPreferredW() * 5);
    Display.getInstance().callSerially(() -> {
       findLogoLabel(f).setPreferredSize(null);
       findAnimateContainer(f).animateLayoutAndWait(2000);
    });
}