third post

·

·

private fun setupRecycler(
recyclerView: RecyclerView,
badges: List,
wonBadges: List
) {
val category = badges.firstOrNull()?.category ?: return

val layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
recyclerView.layoutManager = layoutManager
recyclerView.adapter = BadgeAdapter(badges, wonBadges, category)

recyclerView.clipToPadding = false
recyclerView.clipChildren = false
recyclerView.overScrollMode = RecyclerView.OVER_SCROLL_NEVER

val screenWidth = Resources.getSystem().displayMetrics.widthPixels
val itemWidth = (screenWidth * 0.50f).toInt()
val sidePeek = ((screenWidth - itemWidth) / 2f).toInt()

// Always keep this padding to allow full scroll range
recyclerView.setPadding(sidePeek, 0, sidePeek, 0)

val snapHelper = LinearSnapHelper()
snapHelper.attachToRecyclerView(recyclerView)

// Add scale-on-scroll effect
recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
    override fun onScrolled(rv: RecyclerView, dx: Int, dy: Int) {
        val centerX = rv.width / 2f
        for (i in 0 until rv.childCount) {
            val child = rv.getChildAt(i) ?: continue
            val childCenterX = (child.left + child.right) / 2f
            val distanceFromCenter = abs(centerX - childCenterX)
            val scale = 1 - (distanceFromCenter / centerX) * 0.3f
            child.scaleX = scale.coerceAtLeast(0.7f)
            child.scaleY = scale.coerceAtLeast(0.7f)
        }
    }
})

// Initial nudge to trigger scale effect
recyclerView.post {
    recyclerView.scrollBy(1, 0)
    recyclerView.scrollBy(-1, 0)
}

}


Leave a Reply

Your email address will not be published. Required fields are marked *