Как ограничить прокрутку хода Recyclerview? - PullRequest
0 голосов
/ 19 февраля 2020

В моем вертикальном окне повторного просмотра у меня есть несколько горизонтальных представлений, и у меня возникает проблема: когда я хочу прокрутить влево или вправо, если я прокручиваю немного вверх или вниз одновременно, горизонтальная прокрутка не работает .

Таким образом, моя идея состояла в том, чтобы переопределить то, что вверх, вниз, влево и вправо для представления переработчика. Итак, я наткнулся на эту тему: Как определить направление пролистывания между левым / правым и вверх / вниз

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

var initialX: Float
var initialY: Float

    ui_recyclerView?.setOnTouchListener(object: View.OnTouchListener{

            override fun onTouch(v: View?, event: MotionEvent?): Boolean {
                val action = event?.actionMasked

                if (action == MotionEvent.ACTION_DOWN) {
                    initialX = event.x
                    initialY = event.y

                }
                else if(action == MotionEvent.ACTION_MOVE) {
                    val swipeDirection = GestureUtils.getSwipeDirection(initialX, initialY, event.x, event.y)

                    if (swipeDirection == GestureUtils.Direction.UP || swipeDirection == GestureUtils.Direction.DOWN) {
                        return false
                    }

                }

                return true
            }

        })

Это сработало, но тогда у меня больше не было плавной прокрутки (это была очень робота c), и ни один щелчок.

есть встроенная функция с видом переработчика, чтобы ограничить MoveEvent определенным углом? Если нет, то как я могу вернуть эффект плавной прокрутки в обычном окне рециркуляции?

Это бы мне очень помогло!

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020
recyclerView.setNestedScrollingEnabled(false);
0 голосов
/ 19 февраля 2020

Вы можете попытаться ограничить вертикальные перемещения прокрутки на вашем рециркуляторе с помощью ScrollListener, поэтому он срабатывает только тогда, когда вы делаете большую прокрутку на экране, например:

final int delimitationUp=25;
final int delimitationDown=-25;
yourVerticalRecycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }

        @Override
        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if(dy>delimitationUp){//move up} 
            if (dy<delimitationDown){//move down}

Тест с разделителями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...