一如既往,在尝试使用我不熟悉的功能之前,为了理解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);
}
}
答案 0 :(得分:0)
'replace'需要类似大小的组件,否则由于功能的性质,您将看到跳过。我们通常会在其上使用Component.setSameSize()
。
我不认为您使用的转换装饰器是正确的,但很难说。
启用仅在添加命令之前应用。否则,命令将需要跟踪其所有组件,这可能导致泄漏。您可以使用findCommandComponent
&设置为启用。