如何确定ListView的滚动方向

时间:2012-10-26 18:03:46

标签: android android-layout

我花了一整天时间来确定ListView的滚动方向,但找不到任何解决方案。 我想要实现的是ListView的可移动标题,例如“Google Now”搜索,在向下滚动时向上移动,并在您向上滚动时立即返回。

到目前为止我已尝试过:

实现了自定义ListView overrode onScrollChanged,但它始终为所有属性赋予0。

任何人都可以让我走上正轨。

enter image description here

2 个答案:

答案 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;
    }
});