【问题标题】:How to know if recycler view is scrolled up or down in pre 23 api如何知道回收站视图是在 23 之前的 api 中向上还是向下滚动
【发布时间】:2018-09-10 20:20:35
【问题描述】:

我已经看到了很多关于这个问题的答案,并且也实现了其中一个,但问题是它在开始时没有按预期工作,但过了一段时间它开始正常工作。

这是我的代码。

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,这很好,但我无法理解为什么会这样启动时无法正常工作。

或者这是获取用户滚动方向的正确方法,还是有其他更好的方法可用。

【问题讨论】:

    标签: android android-layout listview android-recyclerview


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多