先看下實現的效果,沒效果什麼都白扯spa
下面直接上方法:code
//目標項是否在最後一個可見項以後 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; } }
使用方法blog
smoothMoveToPosition(rcv_activity_qz_info_list, 0);
在使用方法的時候判斷下非空等操做,避免無用操做get