gpt4 book ai didi

java - 如何使用偏移 Recycler View 进行自动平滑滚动?

转载 作者:行者123 更新时间:2023-12-01 17:48:14 26 4
gpt4 key购买 nike

存在这样的问题,我有水平RecyclerView,其中每个单元格都小于屏幕宽度。

所以我在这里找到了解决方案

RecyclerVIew auto scroll to display all the elements as in News Feed etc.,

如果一个单元格占据屏幕的整个宽度,则所有工作都很好,否则(如果每个单元格占据屏幕宽度的 95%),每次自动滑动都会将单元格放置在屏幕的开头(右侧),这是合乎逻辑的。因此,在一个可见单元格的末尾,它是另一个单元格的开始

enter image description here

看起来不太好。我需要这个单元格像这样位于屏幕中间。

我需要查看上一个单元格 - 当前单元格 - 下一个单元格

enter image description here

现在我想解释一些如何使当前平滑滚动的魔法(正如我在上面的链接中提到的)

我的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);
}

但是这个方法无需偏移即可工作

我发现了另一种可以提供所需偏移量的方法

scrollToPositionWithOffset(final int position, final int offset)

它看起来正是我所需要的,但这种方法不需要平滑的动画。

所以,最终我的问题是:如何将动画逻辑从第一种方法应用到第二种方法(带有偏移量)

欢迎提问

最佳答案

要自动捕捉并在 RecyclerView 中心显示一项,您只需使用 LinearSnapHelper 即可,如下所示:

LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);

如果您想以编程方式滚动到特定项目,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);

这是视觉结果:
.

......................手动滚动...................... ......以编程方式滚动............

Example Example

关于java - 如何使用偏移 Recycler View 进行自动平滑滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52964701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com