您输入的计算是正确的。更好的表达方式为:
@Override
protected void onScrollChanged(int x, int y, int oldX, int oldY) {
super.onScrollChanged(x, y, oldX, oldY);
final int DIRECTION_UP = 1;
if (!canScrollVertically(DIRECTION_UP)) {
}
}
有几种情况可能导致您无法通过此方式检测到页面底部:
- 如果页面使用触摸处理程序处理滚动,并且
pageScale()
大于1.0,则会在CSS坐标空间中检测到“底部”,由于四舍五入的原因,它可能无法正确映射到android.view.View
坐标空间中(尽管这应该在KitKat中得以修复)。
- 您或您正在使用的某个库正在覆盖
WebView.scrollTo
/overScrollBy
/等方法,不允许滚动到底部。
作为最后的解决方法,您可以重写onOverScrolled方法:
@Override
protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
if (scrollY > 0 && clampedY && !startedOverScrollingY) {
startedOverScrollingY = true;
}
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
@Override
protected void onScrollChanged(int x, int y, int oldX, int oldY) {
super.onScrollChanged(x, y, oldX, oldY);
if (y < oldY) startedOverScrollingY = false;
}
如果这个问题在最新的Android版本上重现,请您
提交一个bug报告。最好创建一个最小化的应用程序,用一个空白(或者非常简单)的页面来重现这个问题。
canScrollVertically
方法的解决方案是我唯一有效的解决方案。 - diesersamat