Ale*_*nko 1 java android android-recyclerview
有这样的问题,我有水平RecyclerView,每个单元格小于屏幕宽度。
所以我在这里找到了解决方案
RecyclerVIew 自动滚动以显示新闻提要等中的所有元素,
如果一个单元格占据屏幕的整个宽度,则所有工作都很好,否则(如果每个单元格占据屏幕宽度的 95%),每次自动滑动都将单元格放在屏幕的初学者(右侧)处,这是合乎逻辑的。所以在一个可见单元格的末尾它是另一个单元格的开始
它看起来不太好。我需要这个单元格像这样位于屏幕中间。
我需要查看上一个单元格 - 当前 - 下一个
现在我想解释一些魔法如何使当前平滑滚动(正如我在上面的链接中提到的)
我的这个方法 CustomLinnearLayoutManager
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position)
{
LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext())
{
@Override
public PointF computeScrollVectorForPosition(int targetPosition)
{
return SmoothLayoutManager.this.computeScrollVectorForPosition(targetPosition);
}
@Override
protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics)
{
return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
}
};
linearSmoothScroller.setTargetPosition(position);
startSmoothScroll(linearSmoothScroller);
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法可以在没有偏移的情况下工作
我发现了另一种可以提供所需偏移量的方法
scrollToPositionWithOffset(final int position, final int offset)
Run Code Online (Sandbox Code Playgroud)
它看起来正是我所需要的,但是这种方法在没有平滑动画的情况下也能工作。
所以,最终我的问题是:如何将动画逻辑从第一种方法应用到第二种方法(带有偏移量)
随意问
要自动捕捉并在 中心显示一个项目RecyclerView,您只需使用LinearSnapHelper如下所示:
LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
Run Code Online (Sandbox Code Playgroud)
如果您想以编程方式滚动到特定项目,也可以LinearSnapHelper处理捕捉功能。
SmoothScroller smoothScroller = new LinearSmoothScroller(recyclerView.getContext()) {
@Override
protected int getVerticalSnapPreference() {
return LinearSmoothScroller.SNAP_TO_ANY;
}
@Override
protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
return 120f / displayMetrics.densityDpi;
}
};
...
smoothScroller.setTargetPosition(position);
recyclerView.getLayoutManager().startSmoothScroll(smoothScroller);
Run Code Online (Sandbox Code Playgroud)
这是视觉结果:
.
...................手动滚动................... 以编程方式滚动. …………
| 归档时间: |
|
| 查看次数: |
4775 次 |
| 最近记录: |