Codename One - 隐藏单个元素的动画会删除所有内容

时间:2017-02-21 20:09:49

标签: java animation codenameone

我正在学习如何在使用Codename One创建的移动应用中启动动画的基本教程。

https://www.codenameone.com/manual/animations.html

虽然我得到了在容器上使用布局动画和取消布局动画来将事物移动到位并且不合适的概念,但这对于解除布局动画似乎不起作用。

以下代码的思想是根据某些搜索结果显示或隐藏的元素列表(该示例仅包含普通标签)。 当单独使用动画时,动画效果很好,如教程所示。

但是为什么在调用" animateUnlayoutAndWait()"?

时,一切都完全消失了?
Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS));

        Button button = new Button("Hide");
        hi.add(button);

        for (int iter = 0; iter < 10; iter++) {
            Label b = new Label("Label " + iter);
            b.setWidth(button.getWidth());
            b.setHeight(button.getHeight());
            b.setY(-button.getHeight());
            hi.add(b);
        }

        button.addActionListener((e) -> {

            // hide every second label on click
            if (button.getText().equals("Hide")) {
                button.setText("Show");
                for (int iter = 1; iter < hi.getContentPane().getComponentCount(); iter += 2) {
                    Component c = hi.getContentPane().getComponentAt(iter);
                    c.setHidden(false);
                }
                hi.getContentPane().animateUnlayoutAndWait(500, 0);

            }
            // show stuff again
            else {
                button.setText("Hide");
                for (int iter = 1; iter < hi.getContentPane().getComponentCount(); iter += 2) {
                    Component c = hi.getContentPane().getComponentAt(iter);
                    c.setHidden(true);
                }
                hi.getContentPane().animateLayoutAndWait(500);
            }
        });

        hi.show();

谢谢和最好的问候

2 个答案:

答案 0 :(得分:1)

我注意到您错误地交换了setHidden()个值,if部分应该为true,而else部分应该为false。另外,从动画中删除AndWait

Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS));

Button button = new Button("Hide");
hi.add(button);

for (int iter = 0; iter < 10; iter++) {
    Label b = new Label("Label " + iter);
    b.setWidth(button.getWidth());
    b.setHeight(button.getHeight());
    b.setY(-button.getHeight());
    hi.add(b);
}

button.addActionListener((e) -> {

    // hide every second label on click
    if (button.getText().equals("Hide")) {
        button.setText("Show");
        for (int iter = 1; iter < hi.getContentPane().getComponentCount(); iter += 2) {
            Component c = hi.getContentPane().getComponentAt(iter);
            c.setHidden(true); //should be true here
        }
        hi.getContentPane().animateUnlayout(500, 255, null); //remove AndWait

    } // show stuff again
    else {
        button.setText("Hide");
        for (int iter = 1; iter < hi.getContentPane().getComponentCount(); iter += 2) {
            Component c = hi.getContentPane().getComponentAt(iter);
            c.setHidden(false); //should be false here
        }
        hi.getContentPane().animateLayout(500); //remove AndWait
    }
});

hi.show();

答案 1 :(得分:0)

几个笔记: - 真与假是正确的。没有注意它,因为结果是两种情况下的一切都消失了。 - 在这种情况下,我是否等待它完成并不重要,因为我只称它为案例而不是多次重复。 - 你改变的另一件事是将unlayout动画的目标不透明度从0设置为255.这样,所有元素都保持可见。

这让我有两个问题: 1.为什么unlayout动画应用于我的表单中的所有元素,而不仅仅是那些属性被更改的位置(位置值)?使用时

animateUnlayoutAndWait(500, 0);
一切都会消失,甚至是按钮。

  1. 使用来自钻石的当前解决方案,当调用unlayout动画时,应该消失的各个元素立即消失,唯一的动画元素是标签8,它是动画INTO放置,而不是不合适。