我想计算recyclerview的滚动速度。我想通过了解用户是否快速向下滚动页面来执行某些操作。
我在StackOverflow上找到了这个代码块。我想这段代码是用来改变滚动速度的。我不想改变,只想计算速度,并根据这个速度执行一些事情。
class CustomLinearLayoutManager : LinearLayoutManager {
constructor(context: Context?) : super(context) {}
constructor(context: Context?, orientation: Int, reverseLayout: Boolean) : super(
context,
orientation,
reverseLayout
) {
}
constructor(
context: Context?,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes) {
}
companion object {
private const val MILLISECONDS_PER_INCH = 5f //default is 25f (bigger = slower)
}
override fun smoothScrollToPosition(
recyclerView: RecyclerView,
state: RecyclerView.State?,
position: Int
) {
val linearSmoothScroller: LinearSmoothScroller =
object : LinearSmoothScroller(recyclerView.context) {
override fun computeScrollVectorForPosition(targetPosition: Int): PointF? {
return super.computeScrollVectorForPosition(targetPosition)
}
protected override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float {
return MILLISECONDS_PER_INCH / displayMetrics.densityDpi
}
}
linearSmoothScroller.setTargetPosition(position)
startSmoothScroll(linearSmoothScroller)
}
}
1条答案
按热度按时间von4xj4u1#
试试这个
lastScrollTime和lastScrollY分别记录最后滚动停止的时间戳和滚动距离。在onScrollStateChanged方法中,如果滚动停止,则计算滚动时间和距离以获得滚动速度。在onScrolled方法中,如果滚动尚未停止,则更新lastScrollY的值。