【发布时间】:2014-09-04 11:10:23
【问题描述】:
我有一个 listView,其中包含几个在全屏中具有相同高度的项目。当我释放滚动时,我想自动平滑滚动到该项目,这会占用屏幕上的最大空间。当我滚动到随机位置并点击按钮时,平滑滚动本身会起作用(例如,当第一个可见项目的 60% 可见并且以下项目的 40% 可见时,它会自动平滑滚动到第一个可见项目以在按钮后全屏显示 - OnClick)查看代码:
ListView mylistView= (ListView)findViewById(R.id.ListViewLayout);
int midScreen = mylistView.getMeasuredHeight() / 2;
public void onClick(View v) {
View v = mylistView.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
top =-top;
if (top <= midScreen) {
mylistView.smoothScrollBy(-top, 1000); // if first item takes more space, scroll up
} else {
mylistView.smoothScrollBy((midScreen*2)-top, 1000); // if second item takes more space, scroll down
}
现在我希望在列表停止滚动时调用此工作过程。我创建了一个 onScrollListener 并在 onScrollStateChanged 中,如果 listScroll 停止(所以状态 0,空闲)我尝试了这个:
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState==OnScrollListener.SCROLL_STATE_IDLE) {
View vX = mylistView.getChildAt(0);
int top = (vX == null) ? 0 : vX.getTop();
top =-top;
if (top <= midScreen) {
mylistView.smoothScrollBy(-top, 1000);
} else mylistView.smoothScrollBy((midScreen*2)-top, 1000);
}
}
问题:不是平滑滚动 1 秒到该确切位置以全屏显示想要的项目,而是尽可能快地跳跃。 smoothScrollBy 在状态 0 调用时不再平滑。为什么会这样,有什么解决办法吗?
【问题讨论】:
标签: android listview scroll smooth-scrolling onscrolllistener