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