由于特殊视图类型,我通过在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
不同。