android - 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
}
}
但我得到如下输出:
我怎样才能达到与上面的 gif 完全相同的效果?
解决方案
推荐阅读
- ruby-on-rails - NameError: 未初始化的常量 Capistrano::Puma
- python - 如何组合python列表中的每个第n个dict元素?
- json - 如何从位于 S3 中的 130,000 多个 Json 文件中快速提取信息?
- macos - 无法使用 Docker 在 macOS Catalina 上“制作”Akeneo PIM
- embedded - STM32L452 MCU 上的 SD DMA 出现问题
- ruby - Ruby .find_all 用于大于 x 的数字
- python - Numpy:具有积分限制的数值积分
- java - Java slack sdk客户端如何使调用异步
- php - 如何根据自定义高级菜单选项向 Wordpress 导航菜单项添加类
- javascript - 如何使提升的小部件的html内容在PyQt5中以不同的屏幕尺寸填充小部件