Wie immer wenn vor dem Versuch, Funktionen zu verwenden, die ich nicht vertraut bin, schrieb ich eine kleine Form Nachkommen Klasse, um zu verstehen, com.codename1.ui.Container.replace(Component, Component, Transition)
.Falsche Größen oder Offsets während der Animation
Eine Sache, die beim Spielen mit meinem Formular offensichtlich ist, ist, dass während der Animation die Komponenten unterschiedliche Größen und/oder Offsets haben, als wenn sie nicht animiert sind. Ich bin mir sicher, dass das nicht beabsichtigt ist, oder?
Die andere Sache, die ich entdeckt habe, ist, dass die Befehlsinstanz, die ich der Symbolleiste hinzugefügt habe, ausführbar bleibt, auch wenn ihre enabled
Eigenschaft auf false
festgelegt ist. Was sollte hier zu erwarten sein?
Siehe Code:
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);
}
}
Die Verwendung von 'com.codename1.ui.Toolbar.findCommandComponent (Command)' zum Aktualisieren des 'enabled'-Attributs funktioniert gut, danke. Aber auch wenn 'com.codename1.ui.Component.setSameSize (Component ...)' verwendet wird, was sowieso nicht nötig sein sollte, da die Komponenten 'com.codename1.ui.layouts.BorderLayout.CENTER' sind, Der Übergang malt die Komponenten sichtbar anders. Das passiert auch im Simulator und auf meinem iPhone 5S. –
Das 'SpanLabel' bewegt sich scheinbar während der Animation nach unten und rechts. Das Abzeichen, ein 'FloatingActionButton', wächst offensichtlich. Liegt das daran, dass die Komponenten in Bilder gemalt werden, und das ist anders als direkt malen? –
Das ist möglich. Ist es nur mit Fade oder passiert es mit anderen Übergängen? Kommt es vor, wenn Sie den Übergang direkt verwenden? –