首页 > 解决方案 > RecyclerView 使用自定义布局管理器适合 5 个不同高度和宽度的项目

问题描述

首先,让我向您展示我正在尝试实现的图像:

现在从上面的 gif 开始,我需要用 recyclerview 构建它。屏幕上一次只能容纳 5 个项目。如图所示,中心和其他 4 个项目将被缩放。

我尝试过使用如下自定义布局管理器:

private val shrinkAmount = 0.3f
private val shrinkDistance = 1f

override fun scrollVerticallyBy(dy: Int, recycler: RecyclerView.Recycler?, state: RecyclerView.State?): Int {
        val orientation = orientation
        if (orientation == VERTICAL) {
            val scrolled = super.scrollVerticallyBy(dy, recycler, state)
            if (isScaleView()) {
                val midpoint = height / 2f
                val d0 = 0f
                val d1 = shrinkDistance * midpoint
                val s0 = 1f
                val s1 = 1f - shrinkAmount
                for (i in 0 until childCount) {
                    val child = getChildAt(i)
                    val childMidpoint = (getDecoratedBottom(child!!) + getDecoratedTop(child)) / 2f
                    val d = Math.min(d1, Math.abs(midpoint - childMidpoint))
                    val scale = s0 + (s1 - s0) * (d - d0) / (d1 - d0)
                    child.scaleX = scale
                    child.scaleY = scale
                }
            }
            return scrolled
        } else {
            return 0
        }
    }

但我得到如下输出:

1

我怎样才能达到与上面的 gif 完全相同的效果?

标签: android

解决方案


推荐阅读