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);

posted @ 2018-07-26 13:36  ytymz  阅读(908)  评论(0编辑  收藏  举报