这个问题与我之前的问题“Codename One - Transition from FormA to FormB to FormC”有关。
我花了很多时间尝试在 Form 之间进行工作转换,但在真实设备上没有成功(在模拟器上没有问题)。最后,我选择更改逻辑,将三个 Form 之间的转换替换为替换同一 Form 内的三个 Container。这个想法是 ReplaceAndWait() 方法确保我等待替换结束。但是......同样在这种情况下,代码在 Codename One 模拟器(使用 Android 和 iOS 皮肤)中运行良好,并且在真实设备上不起作用。更清楚一点:在真实设备上没有“淡入淡出效果”(在 Android 4.x 和 5.x 上测试过)。以下代码有什么问题?
Container container1 = new Container(new BorderLayout(BorderLayout.CENTER_BEHAVIOR_SCALE));
container1.add(BorderLayout.CENTER, FlowLayout.encloseCenterMiddle(myIcon));
Container container2 = new Container(new BorderLayout(BorderLayout.CENTER_BEHAVIOR_SCALE));
container2.add(BorderLayout.CENTER, FlowLayout.encloseCenterMiddle(new Label(" ")));
Container container3 = new Container(new BorderLayout(BorderLayout.CENTER_BEHAVIOR_SCALE));
container3.add(BorderLayout.CENTER, backgroundContainer);
startForm.add(BorderLayout.CENTER, container1);
startForm.show();
container1.getParent().replaceAndWait(container1, container2, CommonTransitions.createFade(2000));
container2.getParent().replaceAndWait(container2, container3, CommonTransitions.createFade(1000));
最佳答案
这在设备上对我有用:
Form f = new Form("Fade", new BorderLayout());
Container container1 = BorderLayout.center(FlowLayout.encloseCenterMiddle(new Label(duke)));
Container container2 = BorderLayout.center(FlowLayout.encloseCenterMiddle(new Label(" ")));
Label redDuke = new Label(duke);
redDuke.getUnselectedStyle().setBgColor(0xff0000);
redDuke.getUnselectedStyle().setBgTransparency(255);
Container container3 = BorderLayout.center(FlowLayout.encloseCenterMiddle(redDuke));
f.add(CENTER, container1);
f.show();
callSerially(() -> {
container1.getParent().replaceAndWait(container1, container2, CommonTransitions.createFade(2000));
container2.getParent().replaceAndWait(container2, container3, CommonTransitions.createFade(1000));
});
但由于淡入淡出在设备上的工作方式不同,因此在模拟器上的工作方式并不完全相同。为了提高效率,淡入淡出在设备和模拟器上的实现方式略有不同,某些行为可能呈现不同,尤其是对于半透明/透明组件。
关于android - 代号一 - ReplaceAndWait() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47603776/