MainActivity如下:
package cn.testwebview; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import cn.testwebview.TestWebView.ScrollInterface; /** * Demo描述: * 监听WebView滑动到底部 * * 参考资料: * 1 http://blog.csdn.net/conant1989/article/details/8124582 * Thank you very much */ public class MainActivity extends Activity { private TestWebView mTestWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initWebView(); } //设置WebView private void initWebView() { mTestWebView = (TestWebView) findViewById(R.id.webView); mTestWebView.setVerticalScrollBarEnabled(true); mTestWebView.setHorizontalScrollBarEnabled(false); mTestWebView.getSettings().setSupportZoom(true); mTestWebView.getSettings().setBuiltInZoomControls(true); mTestWebView.getSettings().setJavaScriptEnabled(true); mTestWebView.getSettings().setDomStorageEnabled(true); mTestWebView.getSettings().setPluginsEnabled(true); mTestWebView.requestFocus(); mTestWebView.getSettings().setUseWideViewPort(true); mTestWebView.getSettings().setLoadWithOverviewMode(true); mTestWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); mTestWebView.loadUrl("http://www.ifeng.com"); mTestWebView.setWebViewClient(new TestWebViewClient()); webViewScroolChangeListener(); } //核心代码 private void webViewScroolChangeListener() { mTestWebView.setOnCustomScroolChangeListener(new ScrollInterface() { @Override public void onSChanged(int l, int t, int oldl, int oldt) { //WebView的总高度 float webViewContentHeight=mTestWebView.getContentHeight() * mTestWebView.getScale(); //WebView的现高度 float webViewCurrentHeight=(mTestWebView.getHeight() + mTestWebView.getScrollY()); System.out.println("webViewContentHeight="+webViewContentHeight); System.out.println("webViewCurrentHeight="+webViewCurrentHeight); if ((webViewContentHeight-webViewCurrentHeight) == 0) { System.out.println("WebView滑动到了底端"); } } }); } private class TestWebViewClient extends WebViewClient{ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); } } }
TestWebView如下:
package cn.testwebview; import android.content.Context; import android.util.AttributeSet; import android.webkit.WebView; public class TestWebView extends WebView { public ScrollInterface mScrollInterface; public TestWebView(Context context) { super(context); } public TestWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public TestWebView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); mScrollInterface.onSChanged(l, t, oldl, oldt); } public void setOnCustomScroolChangeListener(ScrollInterface scrollInterface) { this.mScrollInterface = scrollInterface; } public interface ScrollInterface { public void onSChanged(int l, int t, int oldl, int oldt); } }
main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <cn.testwebview.TestWebView android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/hello_world" android:layout_centerInParent="true" /> </RelativeLayout>