我正在尝试在LibGDX中制作这样一个滚轮组件:
我使用ScrollPane,因为它具有输入和快速滑动处理功能。我有一个图像用于滚轮,该图像分成14个部分,滚动窗格本身短两个部分,以便左右两侧都可以滚动到一个部分。一旦滚动位置到达任一方向的末尾,我想将滚动位置重置回中心。反复执行此操作应该创建无限滚动轮的幻觉(希望如此)。
我遇到的问题是如何在代码中定位ScrollPane以在达到任一端时重置图像。到目前为止,我尝试过的所有设置滚动位置的方法都没有起作用。我已经尝试了setScrollX()和scrollTo()方法。我还尝试了将scrollpane的大小设置为各种大小(与图像相同的大小和比图像小两个部分)。我尝试调用scrollpane上的layout、invalidate和pack,以确保在设置滚动值之前正确布局它。我认为updateVisualScroll()可能会强制其更新滚动位置,但这也没有效果。
无论我做什么,它都会忽略我改变滚动位置的所有调用,所以我显然错过了什么。在下面的代码中,我正在尝试让滚轮从图像的中心开始,而不是从最左边开始。
我还需要能够获取当前滚动位置以检测是否已达到任一端。我尝试覆盖act()方法并打印scrollPane.getX(),但即使我手动单击和拖动它来滚动ScrollPane,这个值始终为“0”。
手动单击和拖动时滚动确实有效,因此我认为ScrollPane已正确设置,我只是无法在代码中滚动它。
这是我的代码,为了简便起见,我移除了所有的实验代码,因为没有一个实验成功。
![enter image description here](https://istack.dev59.com/pXkHt.webp)
我遇到的问题是如何在代码中定位ScrollPane以在达到任一端时重置图像。到目前为止,我尝试过的所有设置滚动位置的方法都没有起作用。我已经尝试了setScrollX()和scrollTo()方法。我还尝试了将scrollpane的大小设置为各种大小(与图像相同的大小和比图像小两个部分)。我尝试调用scrollpane上的layout、invalidate和pack,以确保在设置滚动值之前正确布局它。我认为updateVisualScroll()可能会强制其更新滚动位置,但这也没有效果。
无论我做什么,它都会忽略我改变滚动位置的所有调用,所以我显然错过了什么。在下面的代码中,我正在尝试让滚轮从图像的中心开始,而不是从最左边开始。
我还需要能够获取当前滚动位置以检测是否已达到任一端。我尝试覆盖act()方法并打印scrollPane.getX(),但即使我手动单击和拖动它来滚动ScrollPane,这个值始终为“0”。
手动单击和拖动时滚动确实有效,因此我认为ScrollPane已正确设置,我只是无法在代码中滚动它。
这是我的代码,为了简便起见,我移除了所有的实验代码,因为没有一个实验成功。
public class MyScrollWheel extends Container<ScrollPane> {
private ScrollPane scrollPane;
private Image image;
private int scrollOffset;
public MyScrollWheel(){
Texture texture = new Texture(Gdx.files.internal("internal/scrollwheel.png"));
image = new Image(texture);
scrollOffset = (int)(image.getWidth()/14);
scrollPane = new ScrollPane(image);
scrollPane.setOverscroll(false, false);
setActor(scrollPane);
size(image.getWidth()-(scrollOffset*2), image.getHeight());
scrollPane.setScrollX(scrollOffset); // << this doesn't scroll
scrollPane.updateVisualScroll();
}
}