Как исправить ось Y для эффекта карусели с RecyclerView - PullRequest
0 голосов
/ 12 марта 2019

Я получил обзор переработчика. Я хочу реализовать эффект карусели с фиксированной осью 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)

Но результат не чистый, как вы можете видеть здесь:

Эффект плохой карусели

Нижняя часть видов не выровнена, и при прокрутке я получил разные отступы справа и слева.

Что я пропустил?

1 Ответ

0 голосов
/ 12 марта 2019

Вам не нужно делать это вручную, есть класс SnaperHelper, который вы можете использовать. Просто сделайте это так:

val snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);

Подробнее здесь RecyclerView Горизонтальная прокрутка в центре

и здесь https://blog.mindorks.com/using-snaphelper-in-recyclerview-fc616b6833e8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...