代码如下,在 CustomScrollDurationLinearLayoutManager 的构造函数中传入自定义的滑动时长即可,滑动到指定 position 时注意要调用 smoothScrollToPosition()。
import android.content.Context
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSmoothScroller
import androidx.recyclerview.widget.RecyclerView
class CustomScrollDurationLinearLayoutManager(
private val context: Context,
orientation: Int,
reverseLayout: Boolean,
private val customScrollDuration: Int = 0
) : LinearLayoutManager(context, orientation, reverseLayout) {
override fun smoothScrollToPosition(
recyclerView: RecyclerView?,
state: RecyclerView.State?,
position: Int
) {
val linearSmoothScroller =
CustomDurationSmoothScroller(context, customScrollDuration)
linearSmoothScroller.targetPosition = position
startSmoothScroll(linearSmoothScroller)
}
inner class CustomDurationSmoothScroller(
context: Context,
private val customScrollDuration: Int = 0
) : LinearSmoothScroller(context) {
/**
* 控制滑动时长
*/
override fun calculateTimeForScrolling(dx: Int): Int {
return if (customScrollDuration != 0)
customScrollDuration
else
super.calculateTimeForScrolling(dx)
}
}
}