使用StaggeredGridLayoutManager时如何获得RecyclerView的正确滚动距离?

时间:2015-06-12 14:10:21

标签: android android-support-library android-recyclerview

由于特殊视图类型,我通过在ViewHolder中创建并绑定唯一RecyclerView来创建标题视图。标题是完全空白的,但它是全跨度的,当用户滚动RecyclerView时,它的高度非常适合跟随动画:

  • TextView会从标题视图的中心移动到Toolbar,最后“变成”它的标题。在此过程中,TextView将根据垂直偏移量收缩。
  • 另一个TextView会同时与第一个TextView一起移动但不会缩小。相反,当第一个TextView位于Toolbar中的正确位置时,它会更改alpha并最终变为透明。

要实现它们,我需要获得RecyclerView的滚动距离,以便我可以计算translationY或alpha。

以下是我现在所做的事情:

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        private int totalDy = 0;

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            totalDy -= dy;

            // setAlpha, setTranslationY and setScale here according to totalDy.
        }
    });

当数据集不变时,它可以正常工作。但是,当我向下滚动时,向适配器和notifyItemInserted/Removed()插入/删除任何项目,totalDy将不准确。例如,当我删除一个项目时,totalDy将不再返回0。

因此,似乎使用totalDy来获得RecyclerView的滚动距离将无法正常工作。有没有办法让开发人员获得它?

注意:我使用的是StaggeredGridLayoutManager,我认为它与LinearLayoutManager不同。

0 个答案:

没有答案