我已经使用LinearSnapHelper实现了一个水平的recyclelerView,以实现选择特定配置的UI输入.有点像旧学号码选择器/选择器或旋转器.中心的项目是选定的位置.
它工作得很好,所有,但这是问题所在.在初始启动时,我需要以编程方式设置回收器视图的位置,以便所选项(其索引从磁盘加载)位于中心位置.
.scrollToPosition() 不会工作,因为它将所选项目放在开头.
现在我知道我可以做所有的数学运算并计算x坐标并手动设置它,但这就是很多冗余的工作,因为LinearSnapHelper已经这样做了,我觉得应该有一种方法来重用那个逻辑,但是实际上发起了一场狂欢.
我需要类似的东西 LinearSnapHelper.snapToPosition()
小智 11
更一般的解决方案
代码段:
mRecyclerView.scrollToPosition(selectedPosition);
mRecyclerView.post(() -> {
View view = mLayoutManager.findViewByPosition(selectedPosition);
if (view == null) {
Log.e(WingPickerView.class.getSimpleName(), "Cant find target View for initial Snap");
return;
}
int[] snapDistance = mSnapHelper.calculateDistanceToFinalSnap(mLayoutManager, view);
if (snapDistance[0] != 0 || snapDistance[1] != 0) {
mRecyclerView.scrollBy(snapDistance[0], snapDistance[1]);
}
}
});
Run Code Online (Sandbox Code Playgroud)
小智 7
尝试在 RecyclerView 对象上调用 smoothScrollToPosition,并传递位置索引 (int)
mRecyclerView.smoothScrollToPosition(position);
Run Code Online (Sandbox Code Playgroud)
使用 LinearLayoutManager 和 LinearSnapHelper 为我工作。它为初始滚动设置动画,但至少将项目固定到位。
这是我在堆栈上的第一篇文章,希望它有所帮助:)
| 归档时间: |
|
| 查看次数: |
4166 次 |
| 最近记录: |