美文网首页
RecycleView将指定item滚动到顶部

RecycleView将指定item滚动到顶部

作者: CarlosLynn | 来源:发表于2021-04-09 16:11 被阅读0次

    Recycleview滑动方法

    • smoothScrollBy()
    /**
     * Animate a scroll by the given amount of pixels along either axis.
     *
     * @param dx Pixels to scroll horizontally
     * @param dy Pixels to scroll vertically
     */
    public void smoothScrollBy(@Px int dx, @Px int dy) {
        smoothScrollBy(dx, dy, null);
    }
    

    需要提供滑动的距离,具有平滑效果

    • smoothScrollToPosition()
    /**
     * Starts a smooth scroll to an adapter position.
     * <p>
     * To support smooth scrolling, you must override
     * {@link LayoutManager#smoothScrollToPosition(RecyclerView, State, int)} and create a
     * {@link SmoothScroller}.
     * <p>
     * {@link LayoutManager} is responsible for creating the actual scroll action. If you want to
     * provide a custom smooth scroll logic, override
     * {@link LayoutManager#smoothScrollToPosition(RecyclerView, State, int)} in your
     * LayoutManager.
     *
     * @param position The adapter position to scroll to
     * @see LayoutManager#smoothScrollToPosition(RecyclerView, State, int)
     */
    public void smoothScrollToPosition(int position) {
        if (mLayoutSuppressed) {
            return;
        }
        if (mLayout == null) {
            Log.e(TAG, "Cannot smooth scroll without a LayoutManager set. "
                    + "Call setLayoutManager with a non-null argument.");
            return;
        }
        mLayout.smoothScrollToPosition(this, mState, position);
    }
    

    这个方法只保证指定的item被滑动到屏幕中,意味着自下往上滑的话,可以将指定item置顶,但是如果已经在屏幕中的话,那他就不会起作用,并且如果是自上往下滑的话,则置顶的item就会被滑到底部
    具有平滑效果

    • scrollToPosition()
    /**
     * Convenience method to scroll to a certain position.
     *
     * RecyclerView does not implement scrolling logic, rather forwards the call to
     * {@link RecyclerView.LayoutManager#scrollToPosition(int)}
     * @param position Scroll to this adapter position
     * @see RecyclerView.LayoutManager#scrollToPosition(int)
     */
    public void scrollToPosition(int position) {
        if (mLayoutSuppressed) {
            return;
        }
        stopScroll();
        if (mLayout == null) {
            Log.e(TAG, "Cannot scroll to position a LayoutManager set. "
                    + "Call setLayoutManager with a non-null argument.");
            return;
        }
        mLayout.scrollToPosition(position);
        awakenScrollBars();
    }
    

    没有任何效果的移动到指定position

    LayoutManager滑动方法

    • scrollToPositionWithOffset

    这种方式是定位到指定项如果该项可以置顶就将其置顶显示

    参看demo:
    实现滚动方案:
    https://github.com/z-chu/RecyclerView-Scroll-Sample
    平滑滚动方案:
    https://github.com/SilentSword2020/RecyclerViewScrollTop

    相关文章

      网友评论

          本文标题:RecycleView将指定item滚动到顶部

          本文链接:https://www.haomeiwen.com/subject/ytnikltx.html