先看下實(shí)現(xiàn)的效果缸濒,沒效果什么都白扯
下面直接上方法:
//目標(biāo)項(xiàng)是否在最后一個(gè)可見項(xiàng)之后
private boolean mShouldScroll;
//記錄目標(biāo)項(xiàng)位置
private int mToPosition;
//目標(biāo)項(xiàng)是否在最后一個(gè)可見項(xiàng)之后 private boolean mShouldScroll; //記錄目標(biāo)項(xiàng)位置 private int mToPosition;
//滑動(dòng)到指定位置
private void smoothMoveToPosition(RecyclerView mRecyclerView, final int position) { // 第一個(gè)可見位置
int firstItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(0));
// 最后一個(gè)可見位置
int lastItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(mRecyclerView.getChildCount() - 1));
if (position < firstItem) {
// 第一種可能:跳轉(zhuǎn)位置在第一個(gè)可見位置之前
mRecyclerView.smoothScrollToPosition(position);
} else if (position <= lastItem) {
// 第二種可能:跳轉(zhuǎn)位置在第一個(gè)可見位置之后
int movePosition = position - firstItem;
if (movePosition >= 0 && movePosition < mRecyclerView.getChildCount()) {
int top = mRecyclerView.getChildAt(movePosition).getTop();
mRecyclerView.smoothScrollBy(0, top);
}
} else {
// 第三種可能:跳轉(zhuǎn)位置在最后可見項(xiàng)之后
mRecyclerView.smoothScrollToPosition(position);
mToPosition = position;
mShouldScroll = true;
}
}
使用方法
smoothMoveToPosition(rcv_activity_qz_info_list, 0);
在使用方法的時(shí)候判斷下非空等操作吏口,避免無用操作