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