美文网首页
Android RrecyclerView条目跳转到指定位置

Android RrecyclerView条目跳转到指定位置

作者: 景小帮 | 来源:发表于2020-12-12 16:29 被阅读0次

    效果图如下:侧滑点击第几张     主界面显示第几章



    工具类:

    public class MoveToPosition {

       //目标项是否在最后一个可见项之后

        private static boolean mShouldScroll;

        //记录目标项位置

        private static int mToPosition;

        /**

        * RecyclerView 移动到当前位置, 不带动画效果

        * @param manager  设置RecyclerView对应的manager

        * @param mRecyclerView  当前的RecyclerView

        * @param n  要跳转的位置

        */

        public static void MoveToPosition(LinearLayoutManager manager, RecyclerView mRecyclerView, int n) {

           int firstItem = manager.findFirstVisibleItemPosition();

            int lastItem = manager.findLastVisibleItemPosition();

            if (n <= firstItem) {

                  mRecyclerView.scrollToPosition(n);

            }else if (n <= lastItem) {

                   int top = mRecyclerView.getChildAt(n - firstItem).getTop();

                    mRecyclerView.scrollBy(0, top);

            }else {

    //            mRecyclerView.scrollToPosition(n);

                   manager.scrollToPositionWithOffset(n,0);

            }

    }

    /**

        * 滑动到指定位置  带动画效果

        */

        public static void smoothMoveToPosition(LinearLayoutManager manager, 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.scrollToPosition(position);

            }else if (position <= lastItem) {

               // 第二种可能:跳转位置在第一个可见位置之后

                int movePosition = position - firstItem;

                if (movePosition >=0 && movePosition < mRecyclerView.getChildCount()) {

                   int top = mRecyclerView.getChildAt(movePosition).getTop();

                    mRecyclerView.scrollBy(0, top);

                }

    }else {

    // 第三种可能:跳转位置在最后可见项之后

    //            mRecyclerView.smoothScrollToPosition(position);

    //            mToPosition = position;

    //            mShouldScroll = true;

    //            mRecyclerView.scrollToPosition(position);

                manager.scrollToPositionWithOffset(position,0);

                mToPosition = position;

                mShouldScroll =true;

            }

    }

    }




    调用方法:

    titleAdapter.setOnItemClickLitener(new TitleAdapter1.OnItemClickLitener() {

       @Override

        public void onItemClick(View view, int position) {

            drawerlayout.closeDrawers();

            MoveToPosition.smoothMoveToPosition(ContentLinearLayoutManager, recyclerView, position);

        }

    });

    相关文章

      网友评论

          本文标题:Android RrecyclerView条目跳转到指定位置

          本文链接:https://www.haomeiwen.com/subject/iwfjgktx.html