SwipeableContainer在Android上无法正常运行

时间:2017-07-04 12:35:42

标签: codenameone

我的SwipeableContainer问题只出现在Android上。

我像这样实现:

this.buttonRemoveExam = new Button();
this.buttonRemoveExam.getAllStyles().setPadding(0, 0, 0, 0);
this.buttonRemoveExam.getAllStyles().setMargin(0, 0, 0, 0);
this.buttonRemoveExam.setIcon(REMOVE);
this.buttonRemoveExam.setPressedIcon(REMOVE_PRESSED);
this.containerTop = new Container(new BoxLayout(BoxLayout.X_AXIS));
this.containerTop.setUIID("ContainerScoreGraphique");       
this.containerTop.addComponent(labelNameScore);
this.containerTop.addComponent(labelDateExam);
this.containerTop.addComponent(containerButtons);
this.swipeableContainer = new SwipeableContainer(buttonRemoveExam, containerTop);

问题是当向右滑动时,buttonRemoveExam无法正确显示(仅1或2像素)。

我在Android Studio中调试它。我将断点放在SwipeableContainer的动画方法中。它调用topWrapper.setX(100)

@Override
public boolean animate() {
    if (openCloseMotion != null) {
        int val = openCloseMotion.getValue();
        if (openedToRight) {
            topWrapper.setX(val);
        } else {
            topWrapper.setX(-val);
        }

        repaint();
        boolean finished = openCloseMotion.isFinished();
        if (finished) {
            //getComponentForm().deregisterAnimated(this);
            openCloseMotion = null;
            if(!open){
                bottomRightWrapper.setVisible(false);
                bottomLeftWrapper.setVisible(false);
                openedToLeft = false;
                openedToRight = false;
            }else{
                dispatcher.fireActionEvent(new ActionEvent(this,ActionEvent.Type.Swipe));                
            }
        }
        return !finished;
    }
    return false;
}

我在模拟器和iOS版本中没有问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

您无法更改组件的X坐标,因为布局管理器会设置实际坐标。设置坐标有效的唯一情况是,如果您打算执行animateLayout类型的操作,在这种情况下,只有在此过程中没有revalidate时才会有效。