В WebView есть метод для получения высоты содержимого, который я использовал в своем решении:
webView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View view, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
WebView webView = (WebView) view;
float contentHeight = webView.getContentHeight() * webView.getScaleY();
float total = contentHeight * getResources().getDisplayMetrics().density - view.getHeight();
// on some devices just 1dp was missing to the bottom when scroll stopped, so we subtract it to reach 1
float percent = Math.min(scrollY / (total - getResources().getDisplayMetrics().density), 1);
Log.d("SCROLL", "Percentage: " + percent);
if (scrollY >= total - 1) {
Log.d("SCROLL", "Reached bottom");
}
}
}
Ищите:
- Необходимо учитывать масштаб WebView, чтобы получить общую высоту прокрутки
- Плотность дисплея нужно умножить на высоту содержимого, чтобы сравнить ее с scrollY
- На моем Nexus 5X на Android 8 scrollY никогда не достигал высоты, но останавливался на 1 дп до конца (обходной путь включен в код)