我有一个NestedScrollView
(NSVchild),在一个水平RecyclerView
内,在另一个NestedScrollView
(NSVparent)内。NSVchild里面是一个TextView
长文本。
我现在想知道的是,当 NSVchild 从顶部或底部滚动完成时,如何防止 NSVchild 滚动 NSVparent?
我尝试了什么:
当 NSVchild 为0 且用户在屏幕上向下拖动时,以及当 NSVchild 处于最大值且用户向上拖动时,我尝试扩展NestedScrollView
和覆盖并返回 false。返回按预期工作,但问题是理解用户何时在屏幕上向上或向下拖动。这是代码:onTouchEvent
scroll
scroll
false
float deltaY = 0;
float oldY = 0;
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_MOVE:
float y = ev.getY();
deltaY = y - oldY;
oldY = y;
Log.i("deltaY", deltaY+"");
break;
}
[...]
return super.onTouchEvent(ev);
}
在这种方法中,deltaY < 0
意味着屏幕被向上拖动,deltaY > 0
反之亦然。只要 NSVchild 有空间在其内部滚动,它就可以很好地工作。当它从一侧完成滚动并开始滚动 NSVparent 时,deltaY
将在一帧中小于 0,在下一帧中,大于 0,这使我的代码无用。
还有其他方法可以实现我想要的吗?或者更好的方式来了解屏幕是否被向上或向下拖动?