【问题标题】:Codename One - ReplaceAndWait() doesn't work?代号一 - ReplaceAndWait() 不起作用?
【发布时间】:2017-12-02 13:39:37
【问题描述】:

这个问题和我之前的问题“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));

【问题讨论】:

    标签: android ios codenameone


    【解决方案1】:

    这在设备上对我有用:

        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));
        });
    

    但由于淡入淡出在设备上的工作方式不同,它在模拟器上的工作方式并不完全一样。为了效率,淡入淡出在设备和模拟器上的实现略有不同,并且某些行为可能呈现不同,尤其是半透明/透明组件。

    【讨论】:

    • 谢谢。您的代码在我的设备上不起作用:从 container1 到 container2 的第一个淡入淡出根本没有运行(第一个容器显示两秒钟而没有淡入淡出),第二个淡入淡出工作(但以一种奇怪的方式,因为红色背景立即出现,然后公爵图标淡出)。在 Android 4.1.2 上测试
    • 差不多就是这样。当我们有半透明元素时,淡入淡出的透明行为是有问题的。你如何淡化透明度?尝试在具有完全不透明度的相同大小的元素之间进行效果
    猜你喜欢
    • 2015-03-27
    • 1970-01-01
    • 2018-10-20
    • 2019-08-22
    • 2017-04-17
    • 2017-01-13
    • 1970-01-01
    • 2017-12-05
    • 2023-04-04
    相关资源
    最近更新 更多