我已经看到了很多关于这个问题的答案,并且也实现了其中一个,但是问题是它并没有按预期启动,但是过了一会儿就可以正常工作了。
这是我的代码。
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,这很好,但是我无法理解为什么启动时无法正常工作。
或者这是获取用户滚动方向的正确方法,或者还有其他更好的方法。
答案 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具有加速的概念。因此,当您将其拉开时,手指可能会略微向上移动,并且会向上滚动,滚动视图本身最终基本上会被忽略。滚动侦听器跟踪视图实际在做什么。