Как реализовать эффект карусели для recylerview

#android #android-recyclerview #carousel #linearlayoutmanager

#Android #android-recyclerview #карусель #linearlayoutmanager

Вопрос:

Я пытаюсь реализовать эффект, подобный карусели, в RecyclerView следующим образом. Я не могу найти правильную функцию для масштабирования и перемещения видов. Кроме того, представления, которые достигли вершины recyclerview, не должны прокручиваться за края recyclerview, а придерживаться их

 override fun scrollVerticallyBy(dy: Int, recycler: RecyclerView.Recycler?, state: RecyclerView.State?): Int {
        for (i in 0 until childCount) {
            val item = getChildAt(i)
            val recyclerCenter = height / 2f
            val distance = max(abs(recyclerCenter - getDecoratedTop(item!!) / 2f), recyclerCenter - getDecoratedTop(item) / 2f)
            val ratio = (recyclerCenter - item.height / 2f - distance) / (recyclerCenter - item.height / 2f)   1
            item.translationZ = (ratio * 1000f)
            item.alpha = ratio
            item.translationY = -(ratio.pow(2)*10)
            item.scaleX = ratio
            item.scaleY = ratio
        }
        return super.scrollVerticallyBy(dy, recycler, state)
    }
 

Я уже пробовал некоторые решения, такие как carousellayoutmanager, но все они масштабируют все представления, которые не находятся в центре recyclerview

Комментарии:

1. Я не думаю, что есть простой способ сделать это вне наследования RecyclerView. Я полагаю, что компоновка выполняется в onLayoutChildren. НО вы можете использовать CarouselLayoutManager, но вместо использования стандартного PostLayoutListener вы можете написать свой собственный. Все преобразования вычисляются здесь: github.com/Azoft/CarouselLayoutManager/blob/master /… Просто создайте свой собственный и прикрепите его к CarouselLayoutManager с помощью setPostLayoutListener.

2. Ты это имел в виду developer.android.com/reference/android/widget/StackView