Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView Fit使用自定义布局管理器查看5个不同高度和宽度的项目_Android - Fatal编程技术网

Android RecyclerView Fit使用自定义布局管理器查看5个不同高度和宽度的项目

Android RecyclerView Fit使用自定义布局管理器查看5个不同高度和宽度的项目,android,Android,首先,让我向您展示一幅我正努力实现的图像: 现在,从上面的gif开始,我需要用recyclerview构建它。 在屏幕上一次只能安装5个项目。 中心和其他4个项目将按图所示进行缩放 我已尝试使用自定义布局管理器,如下所示: private val shrinkAmount = 0.3f private val shrinkDistance = 1f override fun scrollVerticallyBy(dy: Int, recycler: RecyclerView.Recycler

首先,让我向您展示一幅我正努力实现的图像:

现在,从上面的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
        }
    }
但我得到的结果如下:

我怎样才能完全达到上面的效果