【问题标题】:How to know how many pixels were scrolled in RecyclerView?如何知道在 RecyclerView 中滚动了多少像素?
【发布时间】:2017-07-07 07:00:24
【问题描述】:

我有一个包含不同子视图的RecyclerView

然后用户滚动它。

我想知道与开始状态相比用户滚动了多少像素。

换句话说,我想确切地知道屏幕当前内容与RecyclerView的第一项之间的距离(以像素为单位)。

我看到RecyclerView 有一个方法computeVerticalScrollOffset。但是该方法返回错误的值。

【问题讨论】:

  • @pskink OnScrollListener 只为每次用户滚动时提供 dxdy 值。但我想要的是屏幕上当前内容与RecyclerView第一项之间的总距离
  • @pskink 我做到了。但这将我带到另一个问题:如果我们通过调用方法scrollTo() 以编程方式滚动RecyclerView,我们没有增量并且无法更新总距离。所以总距离不再起作用
  • @pskink 怎么样?如果我知道如何正确更新它,我没有问这个问题
  • @pskink 这有关系吗?由于某些原因,我必须致电scrollTo。但主要问题是:如何准确知道屏幕当前内容到RecyclerView开头的距离

标签: android scroll android-recyclerview


【解决方案1】:

OnScrollListener 可以。覆盖onScroll()方法,其参数是水平或垂直轴滚动的距离。

但问题很少。这传递的不是最终的滚动值,而是许多值,你必须总结直到状态变为RecyclerView.SCROLL_STATE_IDLE

private class YourOnScrollListener extends RecyclerView.OnScrollListener {

        private int scrollXDistance = 0;
        private int scrollYDistance = 0;

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                Log.d(TAG, "X distance: " + scrollXDistance + " " + "Y distance:" + scrollYDistance);
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            scrollXDistance += dx;
            scrollYDistance += dy;
        }
    }

【讨论】:

  • 如果我们通过调用方法scrollTo()以编程方式滚动RecyclerView,我们没有dxdy,并且无法更新总距离。所以总距离不再起作用
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2011-08-12
  • 2014-08-16
  • 1970-01-01
  • 2013-10-06
相关资源
最近更新 更多