我的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版本中没有问题。
谢谢!
答案 0 :(得分:0)
您无法更改组件的X坐标,因为布局管理器会设置实际坐标。设置坐标有效的唯一情况是,如果您打算执行animateLayout
类型的操作,在这种情况下,只有在此过程中没有revalidate
时才会有效。