Android RecyView 滑动置指定位置
1,直接回到顶部
recyview.getLinearLayoutManager().scrollToPositionWithOffset(0, 0);
2,慢慢的回到顶部
private void goTop(int currentPoint) {
if (currentPoint >= 0) {
int step = 3;
if (currentPoint % 10 > 1)
step = 10;
if (currentPoint % 5 > 1)
step = 5;
if (currentPoint - step > 0) {
getView().getLinearLayoutManager().scrollToPositionWithOffset(currentPoint - step, 0);
} else {
getView().getLinearLayoutManager().scrollToPositionWithOffset(0, 0);
return;
}
Message msg = Message.obtain();
msg.obj = currentPoint - step;
msg.what = WHAT_DELAYED_GO_TOP;
goTopHandler.sendMessageDelayed(msg, 30);
}
}
private static int WHAT_DELAYED_GO_TOP = 212;
/**
* 解决内存泄漏问题
*/
private final static class GoTopHandler extends Handler {
private SoftReference<IndexForumContentPresenter> softReference;
private GoTopHandler(IndexForumContentPresenter indexFragmentPresenter) {
this.softReference = new SoftReference<>(indexFragmentPresenter);
}
@Override
public void handleMessage(Message msg) {
// 作废重复调用
if (this.softReference.get() == null)
return;
if (msg.what == WHAT_DELAYED_GO_TOP) { // 切换轮播
// 回调给界面进行切换界面操作
this.softReference.get().goTop((Integer) msg.obj);
}
}
}
2.1慢慢的回到顶部:调用
int firstPosition = recyview.getLinearLayoutManager().findFirstVisibleItemPosition();
goTop(firstPosition);