如何使 libGDX 滚动窗格在不先单击的情况下滚动
How to make a libGDX scrollpane scroll without clicking on it first
我的滚动窗格工作正常,但要使其滚动,首先需要单击它。即使 libGDX 应用程序本身获得焦点,它也不会滚动,直到我单击它。
我不是要让它自动滚动。我只是认为,当用户专注于某个应用程序,并且该用户与可以滚动的 UI 元素交互时,他们希望它可以通过简单地使用鼠标上的滚轮来滚动,而不必单击该元素再次.
您可以添加一个侦听器以在鼠标进入或退出时更改焦点 ScrollPane
。你甚至可以把它变成一个自定义的子类,这样你就不必在任何地方复制它:
public class AutoFocusScrollPane extends ScrollPane {
public AutoFocusScrollPane() {
super(null);
addListener(new InputListener() {
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
getStage().setScrollFocus(AutoFocusScrollPane.this);
}
public void exit(InputEvent event, float x, float y, int pointer, Actor toActor) {
getStage().setScrollFocus(null);
}
});
}
}
这应该使 ScrollPane
在鼠标接触到 actor 时立即滚动,并且在鼠标离开时停止滚动。
我的滚动窗格工作正常,但要使其滚动,首先需要单击它。即使 libGDX 应用程序本身获得焦点,它也不会滚动,直到我单击它。
我不是要让它自动滚动。我只是认为,当用户专注于某个应用程序,并且该用户与可以滚动的 UI 元素交互时,他们希望它可以通过简单地使用鼠标上的滚轮来滚动,而不必单击该元素再次.
您可以添加一个侦听器以在鼠标进入或退出时更改焦点 ScrollPane
。你甚至可以把它变成一个自定义的子类,这样你就不必在任何地方复制它:
public class AutoFocusScrollPane extends ScrollPane {
public AutoFocusScrollPane() {
super(null);
addListener(new InputListener() {
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
getStage().setScrollFocus(AutoFocusScrollPane.this);
}
public void exit(InputEvent event, float x, float y, int pointer, Actor toActor) {
getStage().setScrollFocus(null);
}
});
}
}
这应该使 ScrollPane
在鼠标接触到 actor 时立即滚动,并且在鼠标离开时停止滚动。