package jianshu.io.app.widget; import android.content.Context; import android.util.AttributeSet; import android.webkit.WebView; public class ObservableWebView extends WebView { private OnScrollChangedCallback mOnScrollChangedCallback; private int[] realSize = new int[2]; public ObservableWebView(final Context context) { super(context); } public ObservableWebView(final Context context, final AttributeSet attrs) { super(context, attrs); } public ObservableWebView(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle); } @Override protected void onScrollChanged(final int l, final int t, final int oldl, final int oldt) { super.onScrollChanged(l, t, oldl, oldt); int height = getHeight(); int range = getRealSize()[1]; int threshold = (int) (range - height * 1.2); boolean isAtTheEnd = t >= threshold; if(mOnScrollChangedCallback != null){ mOnScrollChangedCallback.onScrollChanged(isAtTheEnd); } } public int[] getRealSize() { this.realSize[0] = computeHorizontalScrollRange(); this.realSize[1] = computeVerticalScrollRange(); return this.realSize; } public OnScrollChangedCallback getOnScrollChangedCallback() { return mOnScrollChangedCallback; } public void setOnScrollChangedCallback(final OnScrollChangedCallback onScrollChangedCallback) { mOnScrollChangedCallback = onScrollChangedCallback; } /** * Impliment in the activity/fragment/view that you want to listen to the webview */ public interface OnScrollChangedCallback { void onScrollChanged(boolean isAtThenEnd); } }