如何知道Pre 23 API中的回收站视图是向上还是向下滚动

时间:2018-09-10 20:20:36

标签: android android-layout listview android-recyclerview

我已经看到了很多关于这个问题的答案,并且也实现了其中一个,但是问题是它并没有按预期启动,但是过了一会儿就可以正常工作了。

这是我的代码。

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 :(得分:0)

您可以仅使用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());

触摸事件的问题在于,recyclerviews具有加速的概念。因此,当您将其拉开时,手指可能会略微向上移动,并且会向上滚动,滚动视图本身最终基本上会被忽略。滚动侦听器跟踪视图实际在做什么。