我在检测WebView
滚动到底部时遇到问题。我使用以下代码:
@Override
protected void onScrollChanged(int x, int y, int oldX, int oldY) {
super.onScrollChanged(x, y, oldX, oldY);
int bottom = ((int) Math.floor(getContentHeight() * getScale()) - getHeight());
MyLogger.log(y + "____" + bottom);
if (y == bottom) {
// Trigger listener
}
}
记录为我提供了以下输出:
162____164
所以不知怎的,这里有2个像素误算,我不知道它来自哪里。
感谢。
答案 0 :(得分:6)
你在那里的计算似乎是正确的。它最好表达为:
@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)) {
// Trigger listener.
}
}
在某些情况下,您可能无法通过这种方式检测到您位于页面底部:
WebView.scrollTo
/ overScrollBy
/ etc ..以禁止滚动一直向下移动。作为最后的解决方法,您可以覆盖onOverScrolled:
@Override
protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
if (scrollY > 0 && clampedY && !startedOverScrollingY) {
startedOverScrollingY = true;
// Trigger listener.
}
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版本上重现,您可以file a bug report。理想情况下,创建一个简约的应用程序,用空白(或普通)页面重现问题。
答案 1 :(得分:0)
获得以下确切结果:
@Override
protected void onScrollChanged(int x, int y, int oldX, int oldY) {
super.onScrollChanged(x, y, oldX, oldY);
if (y == computeVerticalScrollRange() - getHeight()) {
// Trigger listener
}
}