Как узнать, прокручивается ли вид утилизатора вверх или вниз до 23 api - PullRequest
0 голосов
/ 10 сентября 2018

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

Это мой код.

rvCalender.setOnTouchListener(new View.OnTouchListener() {
    float initialY, finalY;
    boolean isScrollingUp;

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int action = MotionEventCompat.getActionMasked(event);

        switch(action) {
            case (MotionEvent.ACTION_DOWN):
                initialY = event.getY();


        case (MotionEvent.ACTION_UP):
                finalY = event.getY();

                if (initialY < finalY) {
                    Log.d("SCROLLED", "Scrolling up");
                    isScrollingUp = true;
                    isScrolledDownward=false;
                } else if (initialY > finalY) {
                    Log.d("SCROLLED", "Scrolling down");
                    isScrolledDownward= true;
                    isScrollingUp = false;
                }
            default:
        }


        return false;
    }
});

Так что, как только я начинаю прокручивать recyclerview, он продолжает возвращать isScrollDownward false, но после прокрутки 7-8 пунктов, он начинает давать мне isScrollDownward true, что хорошо, но я не могу понять, почему это происходит не работает правильно на старте.

, или это правильный способ получения пользовательского направления прокрутки, или есть какой-то другой лучший способ.

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете просто использовать OnScrollListener (представлен в версии API 22).Вот пример:

public class RecyclerViewOnScrollListener extends RecyclerView.OnScrollListener
{
    public void onScrolled(RecyclerView recyclerView, int dx, int dy)
    {
        super.onScrolled(recyclerView, dx, dy);

        //Scroll down
        if (dy > 0)
        {
            // your logic here
        }

        //Scroll up
        if (dy < 0)
        {
            // your logic here
        }
    }
}

И вы можете прикрепить его следующим образом:

rvCalender.addOnScrollListener(new RecyclerViewOnScrollListener());

Проблема с событием касания заключается в том, что в обзорах переработчиков есть концепция ускорения.Таким образом, ваш палец может слегка подняться вверх, когда вы вытягиваете его, и вы получите касание, которое само прокручивающееся представление в конечном итоге игнорирует.Слушатель прокрутки отслеживает то, что фактически делает представление.

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