我有一个listView,一个计时器遍历每个列表项。理想情况下,我想让当前选中的项目自动居中于listView。我已经使用了smoothScrollToPosition(),但我对如何计算当前项目的中心感到很遗憾。
我的更正代码(感谢Matej Spili):
// Smooth scroll the list item
try {
scrollView.smoothScrollBy(scrollView.getChildAt().getTop() - (scrollView.getHeight() / 2) + (scrollView.getChildAt().getHeight() / 2), 1500);
}
catch (NullPointerException e)
{
System.out.println("NULL POINTER DEALT WITH");
}
答案 0 :(得分:1)
首先,使用 getHeight 获取ListView的高度,返回ListView的高度(以像素为单位)。
然后,使用相同的方法获取行视图的高度。
然后,使用 setSelectionFromTop 并传入ListView高度的一半减去行高度的一半。
类似的东西:
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.setSelectionFromTop(position, h1/2 - h2/2);
或者,你可能只是从顶部为偏移量选择一个常量而不是数学,但我认为它可能在不同的设备上更脆弱,因为setSelectionFromTop的第二个参数看起来像素而不是设备独立像素。
我还没有对这段代码进行过测试,但只要您的行的高度大致相同,它就可以正常工作。
或者在一行中:
scrollView.smoothScrollTo(0, selectedView.getTop() - (scrollView.getHeight() / 2) + (selectedView.getHeight() / 2), 0);