带有偏移量的SmoothScroll

时间:2018-08-28 20:06:34

标签: android

我有一个recylerview,其左侧偏移25dp。意思是可以从左边看到一个项目,以表明列表中有东西,最左边的项目被卡入到位,如我可怕的图中所示。 https://imgur.com/a/K4Z758G

我希望能够平滑滚动到列表中数字1的位置。我已经实现了无法顺利使用的行为;

layoutManager.scrollToPositionWithOffset(position, 25)

其中25是偏移量。但这只是跳线。我也尝试过;

smoothScrollToPosition(position) 

没有成功。

我最新使用的是SmoothScroller,它可以工作,但只能在一个方向上正确地工作。如果我的新位置在当前位置之后,则可以正常工作,但是如果它在当前位置之前,则在新位置之前的位置的一半处移动(请参见图中的项目0),然后再返回到1(不是)非常好。我了解这可能与我的SmoothScroller中的计算有关;

RecyclerView.SmoothScroller smoothScroller = new LinearSmoothScroller(getContext()) {
                @Override
                protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
                    return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
                }

                @Override
                protected int getHorizontalSnapPreference() {
                    return SNAP_TO_START;
                }

                @Override
                public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) {
                    return (boxStart + (boxEnd - boxStart) / 2) - (viewStart + (viewEnd - viewStart) / 2);
                }
            };

            smoothScroller.setTargetPosition(itemPosition);
            layoutManager.startSmoothScroll(smoothScroller);
        }

我附在RecylerView上的SnapHelper是此帖子答案的精简版-How to enable a PagerSnapHelper to snap in both directions in a RecyclerView?。在该方法上有一些填充;

private int distanceToStart(View targetView, OrientationHelper helper, boolean fromEnd) {
    if (mIsRtlHorizontal && !fromEnd) {
        return distanceToEnd(targetView, helper, true);
    }

    return helper.getDecoratedStart(targetView) - helper.getStartAfterPadding() **- 25**;
}

我在开头添加了25个填充的地方。出于所有意图和目的,它可以按计划中其他位置的预期进行工作,但不适用于我当前的用例。我了解我的问题可能与之有关;

@Override
public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) {
    return (boxStart + (boxEnd - boxStart) / 2) - (viewStart + (viewEnd - viewStart) / 2);
}

但是,环顾四周后,几乎没有关于其工作原理和示例的信息(除了我从上面获得的当前计算方法之外,如上所述)。

0 个答案:

没有答案