android - 在 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 中获得类似的寻呼机效果
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)
解决方案
推荐阅读
- sql - 在 Powerbuilder 内联 SQL 中使用 SQL 转义字符
- amazon-s3 - 尝试使用 boto3 将 numpy 数组上传到 s3 时出现 Pyspark 酸洗错误
- mongodb - 我可以在 mongoid 2 中使用什么 mongodb 版本?
- c# - 如何在 MvvmCross 6.x Android 中实现自定义可重用组件
- mongodb - 从限制为 1 的同一查询的 mongo 中计数(Node.js)
- asp.net-core-2.0 - 从 .NetCore 应用程序访问 Linux 根文件
- javascript - 从内部库中捕获设置超时?
- c# - 添加数据时 RangeBar 图表 AxisX 上出现不需要的标签
- c++ - 为什么我的工具栏停靠在不正确的位置?
- c# - 了解列表中的继承项和基础项