使用SwipeBacksupport滑动表单会将整个屏幕变为白色

时间:2017-10-20 21:34:47

标签: codenameone swipe

  1. 在滑动表单时,屏幕左侧部分只是白色,直到完成滑动,然后返回"表格终于画了。这是设计的吗?我期待"回到"形式要么逐渐显露,要么从左边滑入。

  2. 在iOS和Android上,刷卡的表格似乎也变为白色,因此整个屏幕都是白色的,直到刷卡结束。然而,模拟器不是这种情况,你可以看到表格,直到它完全滑出。

  3. 重现行为的代码:

        Form redForm = new Form("Red Form");
        redForm.getAllStyles().setBgColor(0xff0000);
        Button btnToBlueForm = new Button("Go to blue form");
        redForm.add(btnToBlueForm);
    
        Form blueForm = new Form("Blue Form"); 
        blueForm.getAllStyles().setBgColor(0x0000ff);
    
        LazyValue<Form> lazyRedForm = (Object... args) -> redForm;
        SwipeBackSupport.bindBack(blueForm, lazyRedForm); 
    
        btnToBlueForm.addActionListener((ActionListener<ActionEvent>) (ActionEvent evt) -> {
            blueForm.show();
            SwipeBackSupport.bindBack(blueForm, lazyRedForm);
        });
    
        redForm.show();
    

    按红色表格中的按钮。现在出现蓝色表格。向后滑动并观察效果。

1 个答案:

答案 0 :(得分:1)

这是因为转换中的SlideFade模式。如果您将其切换为幻灯片,它应该按预期的方式与背景一起工作。这是您的代码版本,通过将样式应用于内容窗格,可以正常工作:

Form redForm = new Form("Red Form");
redForm.getContentPane().getAllStyles().setBgColor(0xff0000);
redForm.getContentPane().getAllStyles().setBgTransparency(255);

Button btnToBlueForm = new Button("Go to blue form");
redForm.add(btnToBlueForm);

Form blueForm = new Form("Blue Form"); 
blueForm.getContentPane().getAllStyles().setBgColor(0x0000ff);
blueForm.getContentPane().getAllStyles().setBgTransparency(255);

LazyValue<Form> lazyRedForm = (Object... args) -> redForm;
SwipeBackSupport.bindBack(blueForm, lazyRedForm); 

btnToBlueForm.addActionListener((ActionListener<ActionEvent>) (ActionEvent evt) -> {
    blueForm.show();
    SwipeBackSupport.bindBack(blueForm, lazyRedForm);
});

redForm.show();

这与原始代码相反的原因是SlideFade是两个单独的过渡,一个移动/淡化标题,另一个单独滑动内容窗格。由于内容窗格是透明的,因此背景不会被绘制,因为我们假设它是表单背景。通过设置内容窗格的颜色/不透明度,我们可以在SlideFade“看到”的图层上获得完全相同的效果。