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

yww*_*ynm 5 android android-support-library android-recyclerview

我通过创建和绑定由于特殊视图类型的唯一ViewHolderin 创建了标题视图RecyclerView.标题是完全空白的,但它是全跨度的,当用户滚动时,它的高度可以很好地计算后续动画RecyclerView:

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

为了实现它们,我需要获得滚动距离,RecyclerView以便我可以计算translateY或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.
        }
    });
Run Code Online (Sandbox Code Playgroud)

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

结果,使用totalDy来获得滚动距离似乎RecyclerView不会很好.开发人员有没有办法获得它?

注意:我使用的是a StaggeredGridLayoutManager,我觉得它与...不同LinearLayoutManager.