动画期间错误的大小或偏移

时间:2017-01-17 14:39:59

标签: codenameone

一如既往,在尝试使用我不熟悉的功能之前,为了理解com.codename1.ui.Container.replace(Component, Component, Transition),我写了一个小的Form后代类。

使用我的表单时,显而易见的一点是,在动画期间,组件具有不同的大小和/或偏移,而不是动画时。我确信这不是故意的,不是吗?

我发现的另一件事是,即使其enabled属性设置为false,我添加到工具栏的命令实例仍然是可执行的。这里应该有什么期待?

参见代码:

public class FormReplaceComponent extends Form {
    private Component componentActual; 
    private Command commandReplace;

    public FormReplaceComponent() {
        setTitle("FormReplaceComponent");
        setScrollable(false);
        setLayout(new BorderLayout());
        Container contentPane = getContentPane();
        FloatingActionButton badge = FloatingActionButton.createBadge("123");
        contentPane.add(BorderLayout.CENTER, badge);
        componentActual = badge;
        SpanLabel spanLabel = new SpanLabel(
                "The quick brown fox jumps over the lazy dog");
        CommonTransitions commonTransitions = CommonTransitions.createFade(800);
        Transition transitionWrapper = new Transition() {
            @Override
            public void initTransition() {
                commandReplace.setEnabled(false);
                commonTransitions.init(getSource(), getDestination());
                commonTransitions.initTransition();
            }
            @Override
            public void paint(Graphics aGraphics) {
                commonTransitions.paint(aGraphics);
            }
            @Override
            public boolean animate() {
                return commonTransitions.animate();
            }
            @Override
            public void cleanup() {
                commonTransitions.cleanup();
                commandReplace.setEnabled(true);
                super.cleanup();
            }
        };
        commandReplace = new Command("Replace") {
            public void actionPerformed(ActionEvent aActionEvent) {
                if (componentActual == badge) {
                    contentPane.replace(badge, spanLabel, transitionWrapper);
                    componentActual = spanLabel;
                } else {
                    contentPane.replace(spanLabel, badge, transitionWrapper);
                    componentActual = badge;
                }
            }
        };
        getToolbar().addCommandToRightBar(commandReplace);
    }
}

1 个答案:

答案 0 :(得分:0)

'replace'需要类似大小的组件,否则由于功能的性质,您将看到跳过。我们通常会在其上使用Component.setSameSize()

我不认为您使用的转换装饰器是正确的,但很难说。

启用仅在添加命令之前应用。否则,命令将需要跟踪其所有组件,这可能导致泄漏。您可以使用findCommandComponent&设置为启用。