方法一:不显示滚动过程动画
(mViewBinding.rcList.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(pos,0)
方法二:有滚动过程的动画,并且可以控制滚动快慢
class LinearTopSmoothScroller(private val context: Context?, needFast: Boolean) :
LinearSmoothScroller(
context
) {
/**
* spead 值越大滚动越慢
*/
private var spead = 0.03f
/**
* @param context context
* @param needFast 是否需要快速滑动
*/
init {
if (needFast) {
setScrollFast()
} else {
setScrollSlowly()
}
}
override fun getVerticalSnapPreference(): Int {
return SNAP_TO_START
}
override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float {
return spead / displayMetrics.density
}
/**
* 缓慢滚动
*/
fun setScrollSlowly() {
try {
if (context == null) {
return
}
// 建议不同分辨率设备上的滑动速度相同
spead = context.resources.displayMetrics.density * 0.3f
} catch (e: Exception) {
// do nothing
}
}
/**
* 快速滚动
*/
fun setScrollFast() {
try {
if (context == null) {
return
}
spead = context.resources.displayMetrics.density * 0.03f
} catch (e: Exception) {
// do nothing
}
}
}
代码调用
mViewBinding.rcList.layoutManager?.startSmoothScroll(LinearTopSmoothScroller(context, true).apply {
targetPosition = pos
})