【发布时间】:2012-10-26 18:03:45
【问题描述】:
我花了一整天的时间弄清楚ListView的滚动方向,但找不到任何解决方案。
我想要实现的是 ListView 的可移动标题,例如“Google Now”搜索,向下滚动时向上滚动,向上滚动时立即返回。
到目前为止我已经尝试过的:
实现的自定义 ListView 覆盖 onScrollChanged,但它始终为所有属性提供 0。
谁能让我走上正轨。
【问题讨论】:
我花了一整天的时间弄清楚ListView的滚动方向,但找不到任何解决方案。
我想要实现的是 ListView 的可移动标题,例如“Google Now”搜索,向下滚动时向上滚动,向上滚动时立即返回。
到目前为止我已经尝试过的:
实现的自定义 ListView 覆盖 onScrollChanged,但它始终为所有属性提供 0。
谁能让我走上正轨。
【问题讨论】:
这称为Quick Return 模式。 Roman Nurik 发表了一篇博文,解释了它的工作原理,并提供了示例代码来自己实现它。你可以在这里找到:https://plus.google.com/u/0/+RomanNurik/posts/1Sb549FvpJt
【讨论】:
这样的事情应该可以工作。您只需要缓存旧位置和偏移量并使用它来检查方向。您可能还想对 scrollState 进行过滤:
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
int position = listView.getFirstVisiblePosition();
View v = listView.getChildAt(0);
int offset = (v == null) ? 0 : v.getTop();
if (mPosition < position || (mPosition == position && mOffset < offset) {
// Scrolled up
} else {
// Scrolled down
}
mPosition = position;
mOffset = offset;
}
});
【讨论】: