Java 如何放大滚动窗格

Java 如何放大滚动窗格,java,libgdx,Java,Libgdx,我在游戏中设置zoom efect时遇到问题。因此,我有了Stage对象,该对象由滚动窗格填充,其中包括表,其中有一对演员的。我希望能够使用手势放大和缩小表中的元素(滚动条可以调整到新的大小)。我试过使用stage.getCamera().zoom但是它改变了整个滚动窗格的大小,我不想这样做。我想出了一个主意,改变该表中所有演员的大小,但我不确定这是否是最有效的方法。有人能帮我吗?我想最好的办法是,就像你说的,在scrollpane中更改表的大小。实际上,我最终扩展了堆栈并更改了堆栈中表格的比例

我在游戏中设置zoom efect时遇到问题。因此,我有了
Stage
对象,该对象由
滚动窗格
填充,其中包括
,其中有一对
演员的
。我希望能够使用手势放大和缩小表中的元素(滚动条可以调整到新的大小)。我试过使用
stage.getCamera().zoom
但是它改变了整个滚动窗格的大小,我不想这样做。我想出了一个主意,改变该表中所有演员的大小,但我不确定这是否是最有效的方法。有人能帮我吗?

我想最好的办法是,就像你说的,在scrollpane中更改表的大小。实际上,我最终扩展了堆栈并更改了堆栈中表格的比例,然后我得到了另一个表格的实际大小。我的应用程序需要它:

public ZoomableStack() {
    imageTable = new Table();
    sizeTable = new Table();

    this.add(imageTable);
    this.add(sizeTable);

    layout();

    imageTable.setTransform(true);
}
获取表格的缩放尺寸:

@Override
public float getPrefWidth() {
    return imageTable.getWidth() * imageTable.getScaleX();
}

@Override
public float getPrefHeight() {
    return imageTable.getHeight() * imageTable.getScaleY();
}
重写布局方法,如下所示:

@Override
public void layout() {
    float width = this.getWidth();
    float height = this.getHeight();

    imageTable.setSize(imageTable.getPrefWidth(), imageTable.getPrefHeight());

    float tableWidth = imageTable.getWidth();
    float tableHeight = imageTable.getHeight();

    imageTable.setOrigin(tableWidth / 2, tableHeight / 2);
    imageTable.setPosition((width / 2 - (tableWidth / 2)), (height / 2 - (tableHeight / 2)));
    sizeTable.setBounds(((width - getPrefWidth()) / 2), ((height - getPrefHeight()) / 2), getPrefWidth(), getPrefHeight());
}
您可能需要重写setCullingArea(),因为表最终将比屏幕大,然后表中的所有参与者都将消失:

@Override
public void setCullingArea(Rectangle cullingArea) {

}
然后创建zoom方法,在其中调用invalidateHierarchy():

然后,只需将堆栈添加到滚动窗格中并使用缩放:

ZoomableStack zoomableStack = new ZoomableStack();
new ScrollPane(zoomableStack);

zoomableStack.zoom(speed * amount);

伟大的解决方案!
ZoomableStack zoomableStack = new ZoomableStack();
new ScrollPane(zoomableStack);

zoomableStack.zoom(speed * amount);