如何将 ScrollPane 滚动条位置固定在特定位置,以便它显示例如它的子表的最后一项而不是第一项表(默认)?我尝试 setScrollX 和 setScrollY 但它不起作用。
我有一个游戏关卡菜单(有很多关卡),我想在打开该菜单时向用户显示最后解锁的关卡。
如何将 ScrollPane 滚动条位置固定在特定位置,以便它显示例如它的子表的最后一项而不是第一项表(默认)?我尝试 setScrollX 和 setScrollY 但它不起作用。
我有一个游戏关卡菜单(有很多关卡),我想在打开该菜单时向用户显示最后解锁的关卡。
layout()
在尝试调用之前,您可能必须自己手动调用ScrollPanesetScrollX
或setScrollY
当您想避免 ScrollPane 的弹跳效果时,请在您的 show() 方法中使用以下代码,以便 ScrollPane 立即显示您指定的确切位置。
scrollPane.layout();
scrollPane.setScrollPercentY(.5f);
scrollPane.updateVisualScroll();
除了设置滚动百分比,您还可以使用
scrollPane.scrollTo(x, y, width, height);
或者
scrollPane.setScrollY(y);
如果你有一个垂直堆叠的窗格,这对我有用:
setScrollPercentY(100);
对我来说,之前的所有答案都不起作用:即使在scrollPane.layout()
多次调用之后,滚动窗格的areaHeight
( scrollHeight
) 仍然是 -2、0 或其他。只有在随后的布局调用中,才会设置正确的高度,从而导致内容从顶部滑入的动画。
为我的用例修复它的唯一选项(添加所有初始内容后最初滚动到底部)是ScrollPane.layout()
在每次布局更改后覆盖并滚动到底部:
open class BottomScrollingScrollPane(actor: Actor?, skin: Skin, style: String): ScrollPane(actor, skin, style) {
override fun layout() {
super.layout()
scrollTo(0f, 0f, 0f, 0f)
updateVisualScroll()
}
}
...并且可选地,如果您使用 libktx:
@Scene2dDsl
@OptIn(ExperimentalContracts::class)
inline fun <S> KWidget<S>.bottomScrollingScrollPane(
style: String = defaultStyle,
skin: Skin = Scene2DSkin.defaultSkin,
init: KBottomScrollingScrollPane.(S) -> Unit = {}
): KBottomScrollingScrollPane {
contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) }
return actor(KBottomScrollingScrollPane(skin, style), init)
}
class KBottomScrollingScrollPane(skin: Skin, style: String) : BottomScrollingScrollPane(null, skin, style), KGroup {
override fun addActor(actor: Actor?) {
this.actor == null || throw IllegalStateException("ScrollPane may store only a single child.")
this.actor = actor
}
}
一个副作用是在每次布局更改、调整大小等之后再次向下滚动,但这对我来说很好,因为布局无论如何都是非常短暂的。
这对我有用:
scrollPane.layout();
scrollPane.setScrollPercentY(100);
此代码用于设置 ScrollPane 的位置、宽度和高度。
scroll.setBounds(0, 60, Gdx.graphics.getWidth(), 200);