将ScrollView滚动到中间

3

我正在尝试在Android中以编程方式滚动一个HorizontalScrollView。

然而我只发现了这个方法:

scroll.fullScroll(View.FOCUS_DOWN)

我希望滚动视图到正中间位置。

有什么提示吗?

我知道有一种方法可以滚动到精确的位置:setScrollX,但参数需要计算,我不知道怎么算。

4个回答

7
你可以使用 scrollTo 方法,并通过获取 y 底部坐标的一半来滚动它。
myScrollView.scrollTo(0, myScrollView.getBottom()/2);

对于一个水平滚动视图:

myScrollView.scrollTo(widthOfScrollView/2, 0);

1
我正在寻找HorizontalScrollView。这是用于垂直的。 - Reinherd
@SergiCastellsaguéMillán 你也可以使用scrollTo,但在x坐标上使用getRight()。这样行得通吗? - Alexis C.
1
不是的。这是我的代码:HorizontalScrollView scrollViewSplash = (HorizontalScrollView) this.findViewById(R.id.scrollViewSplash); scrollViewSplash.scrollTo(scrollViewSplash.getRight()/2, 0); - Reinherd
可以查看这篇帖子 https://dev59.com/8lvUa4cB1Zd3GeqPxtwQ 并尝试获取滚动视图的宽度。 - Alexis C.

3

虽然这是一个老问题,但我发现其他答案对我不起作用。以下方法效果很好。

val vto = viewTreeObserver
vto.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
    override fun onGlobalLayout() {
        val maxScroll = scrollView.getChildAt(0).width - scrollView.width
        scrollView.scrollTo(maxScroll / 2, 0)

        viewTreeObserver.removeOnGlobalLayoutListener(this)
    }
})

2
ViewTreeObserver vto = scroll.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    public void onGlobalLayout() {
         scroll.scrollTo(scroll.getChildAt(0).getWidth()/2, 0);
    }
});

这个有效!


1

如果要在Kotlin中轻松实现此操作,而又不使用OnGlobalLayoutListener,可以使用以下代码,其中wideView是ScrollView中的视图。

wideView.apply { post { scrollView.scrollTo((left + right - scrollView.width) / 2, 0) } }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接