Skip to content

Instantly share code, notes, and snippets.

@patrick-elmquist
Last active November 26, 2018 08:21
Show Gist options
  • Save patrick-elmquist/6bd1cfa03bf401adcc5317ad9d93b22d to your computer and use it in GitHub Desktop.
Save patrick-elmquist/6bd1cfa03bf401adcc5317ad9d93b22d to your computer and use it in GitHub Desktop.
fun RecyclerView.setupParallaxScrollListener() {
addOnScrollListener(object : OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
val layoutManager = layoutManager as? LinearLayoutManager ?: return
val scrollOffset = recyclerView.computeHorizontalScrollOffset()
val offsetFactor = (scrollOffset % measuredWidth) / measuredWidth.toFloat()
val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition()
findViewHolderForAdapterPosition(firstVisibleItemPosition)?.let {
(it as? ShowViewHolder)?.offset = -offsetFactor
}
val lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition()
if (firstVisibleItemPosition != lastVisibleItemPosition) {
findViewHolderForAdapterPosition(lastVisibleItemPosition)?.let {
(it as? ShowViewHolder)?.offset = 1 - offsetFactor
}
}
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment