我正在尝试使用重叠的项(类似于组件的轮播)来实现ViewPager2。 一切似乎都很好,但我的中心项目被下一个项目所覆盖。我希望我的中心物品在任何邻居物品的前面。
请参见下图:
当您使用 ViewPager1 类时,我们可以覆盖 getChildDrawingOrder
@Override
protected int getChildDrawingOrder(int childCount, int i)
在此处查看示例解决方案:link
但是不能派生和扩展ViewPager2(因为ViewPager2类是最终的)。我该怎么办?
答案 0 :(得分:1)
引擎盖下的ViewPager2
包含一个RecyclerView
,因此,如果要更改子绘制顺序,则需要在RecyclerView
上执行。
虽然这不是官方支持的解决方案,但是您可以通过在视图分页器上要求第一个孩子来访问RecyclerView
。看到此评论:
https://issuetracker.google.com/issues/134912610#comment3
val recyclerView = viewPager2.getChildAt(0)
一旦您有权访问RecyclerView
,就可以添加ChildDrawingOrderCallback
。
如果您刚好有3页,并且希望将中间页绘制在其他页的顶部,则下面的代码可以工作。
recyclerView.setChildDrawingOrderCallback { childCount, i ->
when (i) {
0 -> 0
1 -> 2
2 -> 1
else -> throw IllegalStateException("Expected 3 items")
}
}
答案 1 :(得分:0)
经过一番研究,我最终决定摆脱ViewPager2并返回到ViewPager1,因为我可以覆盖 getChildDrawingOrder 函数,然后我跟随this answer来实现我真正想要的。希望ViewPager2何时能很快完成定稿,并使ViewPager2类成为非最终的