【问题标题】:Image animation issues codename one图像动画问题代号一
【发布时间】:2015-12-10 11:56:17
【问题描述】:

想通过将我的徽标缩放到启动屏幕来为其制作动画。 到目前为止尝试了以下方法:

@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 的容器。

【问题讨论】:

    标签: java codenameone


    【解决方案1】:

    阻塞 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 lambda:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-03
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      相关资源
      最近更新 更多