2

我正在尝试使用重叠项目(类似轮播的组件)来实现 ViewPager2。一切似乎都很好,但我的中心项目与下一个项目重叠。我希望我的中心项目位于任何相邻项目的前面。

见下图:

在此处输入图像描述

当您使用ViewPager1类时,我们可以覆盖getChildDrawingOrder

@Override
    protected int getChildDrawingOrder(int childCount, int i)

在此处查看示例解决方案:链接

但是 ViewPager2 不能被派生和扩展(因为 ViewPager2 类是最终的)。我该怎么办?

4

2 回答 2

1

引擎盖下ViewPager2包含一个RecyclerView,因此如果您想更改子绘图顺序,您需要在RecyclerView.

虽然它不是官方支持的解决方案,但您可以RecyclerView通过在视图寻呼机上询问第一个孩子来访问。看到这个评论:

https://issuetracker.google.com/issues/134912610#comment3

val recyclerView = viewPager2.getChildAt(0)

一旦您有权访问,RecyclerView您可以添加一个ChildDrawingOrderCallback.

https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.ChildDrawingOrderCallback

如果您只有 3 页并且希望将中间页绘制在其他页的顶部,则下面的代码可以工作。

  recyclerView.setChildDrawingOrderCallback { childCount, i ->
        when (i) {
            0 -> 0
            1 -> 2
            2 -> 1
            else -> throw IllegalStateException("Expected 3 items")
        }
    }
于 2020-07-23T17:53:32.767 回答
0

经过一番研究,我终于决定摆脱 ViewPager2 并回到 ViewPager1 ,因为我可以覆盖getChildDrawingOrder函数,然后我按照这个答案来实现我真正想要的。希望 ViewPager2 将很快完成,他们将使 ViewPager2 类非最终

于 2020-01-15T04:55:55.493 回答