7

を使用してLinearSnapHelper、「スナップ」内のアイテムをRecyclerView画面上の所定の位置に配置しています(カードが画面の大部分を占めるため、スワイプ/フリング/スクロールのたびに所定の位置にスナップして画面を埋めたいと思います)。

カードを素早く所定の位置にはめ込む方法に苦労しています。カスタムの作成(およびまたはでメソッドのLinearLayoutManager編集)、およびカスタムの作成(および fling メソッドの編集)を試みました。しかし、カードが所定の位置に「スナップ」する速度には何の影響もありません。calculateSpeedPerPixelscrollToPositionsmoothScrollToPositionRecyclerView

LinearSnapHelper問題は、カードを所定の位置に「スクロール」する方法がよくわからないことだと思います。やメソッドを使用していないようですLinearLayoutManagerscrollToPositionsmoothScrollToPosition

    snapHelper = 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;
                }
            }

            if (layoutManager.canScrollVertically()) {
                if (velocityY > 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;
        }
    };
    snapHelper.attachToRecyclerView(mRecyclerView);
4

5 に答える 5