4

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

到目前为止我已经尝试过的:

实现了自定义 ListView 覆盖onScrollChanged,但它始终为所有属性提供 0。

谁能让我走上正轨。

在此处输入图像描述

4

2 回答 2

4

这称为Quick Return模式。Roman Nurik 写了一篇博文,解释了它的工作原理,并提供了示例代码来自己实现它。你可以在这里找到:https: //plus.google.com/u/0/+RomanNurik/posts/1Sb549FvpJt

于 2013-04-11T17:30:22.253 回答
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;
    }
});
于 2012-10-26T18:55:34.113 回答