先看下实现的效果,没效果什么都白扯
下面直接上方法:
//目标项是否在最后一个可见项之后 private boolean mShouldScroll; //记录目标项位置 private int mToPosition; //目标项是否在最后一个可见项之后 private boolean mShouldScroll; //记录目标项位置 private int mToPosition; //滑动到指定位置 private void smoothMoveToPosition(RecyclerView mRecyclerView, final int position) { // 第一个可见位置 int firstItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(0)); // 最后一个可见位置 int lastItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(mRecyclerView.getChildCount() - 1)); if (position < firstItem) { // 第一种可能:跳转位置在第一个可见位置之前 mRecyclerView.smoothScrollToPosition(position); } else if (position <= lastItem) { // 第二种可能:跳转位置在第一个可见位置之后 int movePosition = position - firstItem; if (movePosition >= 0 && movePosition < mRecyclerView.getChildCount()) { int top = mRecyclerView.getChildAt(movePosition).getTop(); mRecyclerView.smoothScrollBy(0, top); } } else { // 第三种可能:跳转位置在最后可见项之后 mRecyclerView.smoothScrollToPosition(position); mToPosition = position; mShouldScroll = true; } }
使用方法
smoothMoveToPosition(rcv_activity_qz_info_list, 0);
在使用方法的时候判断下非空等操作,避免无用操作