на элементе привязки RecyclerItemClickListener в центре - PullRequest
0 голосов
/ 19 марта 2019

Я хочу прокрутить recylerview при нажатии на элемент, чтобы элемент находился в центре полностью видимым, а другие элементы были частично видны.(как показано на первом рисунке)

Я пытался сделать это с помощью прокрутки (броска), которая работает отлично, но когда я пытаюсь сделать это при нажатии на элемент, это не работает.(как показано на втором рисунке)

 mSnapHelper = new LinearSnapHelper() {
            @Override
            public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
                View centerView = findSnapView(layoutManager);
                if (centerView == null)
                    return RecyclerView.NO_POSITION;

                int position = layoutManager.getPosition(centerView);
                int targetPosition = -1;
                if (layoutManager.canScrollHorizontally()) {
                    if (velocityX < 0) {
                        targetPosition = position - 1;
                    } else {
                        targetPosition = position + 1;
                    }
                }

                final int firstItem = 0;
                final int lastItem = layoutManager.getItemCount() - 1;
                targetPosition = Math.min(lastItem, Math.max(targetPosition, firstItem));
                return targetPosition;
            }
        };
        mImagesRecyclerView.setLayoutManager(mLayoutManager);
        mSnapHelper.attachToRecyclerView(mImagesRecyclerView);

        mImagesRecyclerView.addOnItemTouchListener(
                new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        Log.d("position", "" + position);
                        mImagesRecyclerView.scrollToPosition(position);
                        mImageAdapter.setSelected(position);
                    }
                })
        );

        mImagesRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                int snapPosition = mLayoutManager.getPosition(mSnapHelper.findSnapView(mLayoutManager));
                mImageAdapter.setSelected(snapPosition);
            }

        });

enter image description here enter image description here

...