我花了一整天时间来确定ListView
的滚动方向,但找不到任何解决方案。
我想要实现的是ListView的可移动标题,例如“Google Now”搜索,在向下滚动时向上移动,并在您向上滚动时立即返回。
到目前为止我已尝试过:
实现了自定义ListView overrode onScrollChanged
,但它始终为所有属性赋予0。
任何人都可以让我走上正轨。
答案 0 :(得分:4)
这称为Quick Return
模式。 Roman Nurik做了一篇博客文章,解释了它是如何工作的,并提供了自己实现它的示例代码。你可以在这里找到:https://plus.google.com/u/0/+RomanNurik/posts/1Sb549FvpJt
答案 1 :(得分:0)
这样的事情应该有效。您只需缓存旧位置和偏移量并使用它来检查方向。您可能还希望过滤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;
}
});