Я получил обзор переработчика. Я хочу реализовать эффект карусели с фиксированной осью Y следующим образом:
Хороший эффект карусели
Я написал собственный LinearLayoutManager, чтобы иметь возможность изменять режим прокрутки в окне повторного просмотра.
Я пытаюсь получить горизонтальную прокрутку с осью Y, прикрепленной к нижней части вида, и осью X к центру вида.
private val mShrinkAmount = 0.30f
private val mShrinkDistance = 1f
override fun onLayoutChildren(recycler: RecyclerView.Recycler?, state: RecyclerView.State?) {
super.onLayoutChildren(recycler, state)
scrollHorizontallyBy(0, recycler, state)
}
override fun scrollHorizontallyBy(dx: Int, recycler: RecyclerView.Recycler?, state: RecyclerView.State?): Int {
val scrolled = super.scrollHorizontallyBy(dx, recycler, state)
val scalePoint = (width / 2f)
val d0 = 0f
val d1 = (mShrinkDistance * scalePoint)
val s0 = 1f
val s1 = (1f - mShrinkAmount)
for (index in 0..(childCount - 1)) {
val child = getChildAt(index)
val childMidPoint = ((getDecoratedLeft(child!!) + getDecoratedRight(child)) / 2f)
val d = Math.min(d1, Math.abs(scalePoint - childMidPoint))
val scale = (s0 + (s1 - s0) * (d - d0) / (d1 - d0))
child.scaleX = scale
child.scaleY = scale
child.pivotY = (getDecoratedBottom(child) * 1f)
}
return scrolled
}
Я установил значение pivotY в нижней части представления здесь
child.pivotY = (getDecoratedBottom(child) * 1f)
Но результат не чистый, как вы можете видеть здесь:
Эффект плохой карусели
Нижняя часть видов не выровнена, и при прокрутке я получил разные отступы справа и слева.
Что я пропустил?