如何解决在 Android 中的 Scroll 上使用 SnapHelper 时的抖动/反弹效果
我已经尝试了 SnapHelper Linear 和 Pager 但在这两种情况下,gif 中显示的以下效果发生在向上滚动时
https://media4.giphy.com/media/CN0FsbuoNG9d9DhFqd/giphy.gif
我附上了一个线性布局管理器
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/oc_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layoutManager="androidx.recyclerview.widget.linearlayoutmanager" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
上课
private fun stickyScroll(){
val helper: SnapHelper = PagerSnapHelper()
helper.attachToRecyclerView(binding?.ocList)
}
并且还尝试了这段代码,以在线性 Snap Helper 中获得类似 pager 的效果
val SnapHelper: LinearSnapHelper = object : LinearSnapHelper() {
override fun findTargetSnapPosition(
layoutManager: RecyclerView.LayoutManager,veLocityX: Int,veLocityY: Int
): Int {
val centerView = findSnapView(layoutManager) ?: return RecyclerView.NO_POSITION
val position = layoutManager.getPosition(centerView)
var targetPosition = -1
if (layoutManager.canScrollHorizontally()) {
targetPosition = if (veLocityX < 0) {
position - 1
} else {
position + 1
}
}
if (layoutManager.canScrollVertically()) {
targetPosition = if (veLocityY < 0) {
position - 1
} else {
position + 1
}
}
val firstItem = 0
val lastItem = layoutManager.itemCount - 1
targetPosition = Math.min(lastItem,Math.max(targetPosition,firstItem))
return targetPosition
}
}
SnapHelper.attachToRecyclerView(binding?.ocList)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。