最近工作比较忙,很久没有写博客了,今天来记录一下recyclerView中item的滑动。
一、在recyclerView中,滑动有几种方法
1. scrollBy(int x, int y)
这个可以滑动一定的像素,没有滑动动画
2. smoothscrollBy(int x, int y)
这个可以滑动一定的像素,有滑动动画
3.scrollToPosition(int position)
滑动到一定的position,没有滑动效果
4. smoothScrollToPosition(int position)
滑动到一定的position,有滑动效果
二、本次项目我用的是smoothscrollBy(int x, int y) ,具体用法如下
在需要滑动的时候,调用initNormalItemPositon()方法,index是需要滑动的item的position,计算出需要滑动的item的距离。
fun initNormalItemPosition() {
val currentVideo = (parentFragment as? VideoPlayListener)?.getCurrentPlayVideo()
var index = normalVideoData?.indexOfFirst { it.id == currentVideo?.id } ?: return
if (index != -1) {
recycler_view.smoothScrollBy(getPositionXDistance(index, recycler_view) - getScrollXDistance(recycler_view), 0)
} else {
recycler_view.smoothScrollBy(getPositionXDistance(0, recycler_view) - getScrollXDistance(recycler_view), 0)
}
}
private fun getPositionXDistance(position: Int, view: View): Int {
val itemWidth = context!!.dp2px(140f + 9)
return itemWidth * position - ((view as? RecyclerView)?.width!! - context!!.dp2px(140f)) / 2
}
private fun getScrollXDistance(view: View): Int {
val layoutManager = (view as? RecyclerView)?.layoutManager as LinearLayoutManager
var position = layoutManager.findFirstVisibleItemPosition()
if (position < 0) {
return 0
}
val firstVisibleChildView = layoutManager.findViewByPosition(position)
val itemWidth = context!!.dp2px(140f + 9)
return position * itemWidth - (firstVisibleChildView?.left ?: 0)
}