Android监听WebView滑动到底部

简介: MainActivity如下: package cn.testwebview;import android.app.Activity;import android.

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>


 

相关文章
|
2月前
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
44 2
|
4月前
|
Android开发
Android使用ViewPager做无限轮播,人为滑动时停止
Android使用ViewPager做无限轮播,人为滑动时停止
95 2
|
5月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
154 12
|
5月前
|
监控 Android开发 开发者
Android经典面试题之实战经验分享:如何简单实现App的前后台监听判断
本文介绍在Android中判断应用前后台状态的两种方法:`ActivityLifecycleCallbacks`和`ProcessLifecycleOwner`。前者提供精细控制,适用于需针对每个Activity处理的场景;后者简化前后台检测,适用于多数应用。两者各有优劣:`ActivityLifecycleCallbacks`更精确但复杂度高;`ProcessLifecycleOwner`更简便但可能在极端场景下略有差异。根据应用需求选择合适方法。
47 2
|
5月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
5月前
|
Android开发 UED
Android采用Scroller实现底部二楼效果
Android采用Scroller实现底部二楼效果
45 0
Android采用Scroller实现底部二楼效果
|
6月前
|
Android开发
技术经验分享:Android前后台切换的监听
技术经验分享:Android前后台切换的监听
124 2
|
5月前
|
Android开发
Android仿高德首页三段式滑动
Android仿高德首页三段式滑动
168 0
|
5月前
|
Web App开发 JavaScript 前端开发
Android端使用WebView注入一段js代码实现js调用android
Android端使用WebView注入一段js代码实现js调用android
144 0
|
6月前
|
编解码 Android开发
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
111 0