Android监听WebView滑动到底部

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>

 

时间: 2024-09-21 05:08:26

Android监听WebView滑动到底部的相关文章

android webview 滑动-监听webview滑动,并且禁止webview向下滑动

问题描述 监听webview滑动,并且禁止webview向下滑动 public void onSChanged(int l, int t, int oldl, int oldt) { if ((mBrowser.getAllHeight() * 0.1) - (mBrowser.getCurrenHeight()) <= 0) Log.d(log.getTag(), "到底了"); } } 当监听到webview滑动到整体HTML 10%的位置的时候,禁止继续向下滑动,只保持能后

Android监听ScrollView滑动到顶端和底部例子

package zm.scroolview; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.ScrollView; public class MainActivity extends Activity{     private ScrollView sl;     @Ove

精确监听ListView滑动到底部

main.xml如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > &l

封装的android监听手指左右滑动屏幕的事件类分享_Android

左右滑动是智能手机最常用的动作,在此简单的封装了一下,以后直接拿来用就可以了. 简单的只需要几行就可以了,下面那个类是封装好了的. package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.util.Log; import android.widget.RelativeLayout; public c

Android ListView监听上下滑动(判断是否显示返回顶部按钮)

在有些listview上面和ScrollView上,当滑动到底部的时候,在右下角会出现一个回到顶部的按钮,提供更好的用户体验. 效果图如下: 布局  先说布局,可以用帧布局Framelayout,也可以用相对布局relativelayout.看下listview的布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sche

监听ScrollView滑动到顶端和底部

MainActivity如下: package cn.testscrollview; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ScrollView; import android.app.Activity; /** * Demo描述: * 监

封装的android监听手指左右滑动屏幕的事件类分享

左右滑动是智能手机最常用的动作,在此简单的封装了一下,以后直接拿来用就可以了. 简单的只需要几行就可以了,下面那个类是封装好了的. package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.util.Log; import android.widget.RelativeLayout; public c

精确监听AbsListView滚动至底部

用户使用android客户端时,当ListView滚动至底部,可以由一个按钮来提示用户是否读下一页,那么如果使用GridView呢?现在很多WEB 2.0上的体验就是当底部时自动读取下一页数据,GridView(ListView也可)可以采用这种方法.网上已经有很多文章介绍了如何判断ListView是否滚动至底部,原理是 AbsListView.getLastVisiblePosition() = (AbsListView.getCount() - 1) 即到底,如果往上拖一点,用户看起来已经离

Android监听获取应用的安装和卸载事件

Android 应用程序的安装和卸载事件,是由系统进行监听并全局广播的,支 持1.5(android 3)以上 因此,如果想要监听获取应用的安装和卸载事 件,只需要自定义一个BroadcastReceiver,来对系统广播进行监听和处理 BroadcastReceiver 是系统全局广播监听类, 其主要方法是onReceive (),自定义的广播类继承于它并实现自己的onReceive()处理逻辑 BroadcastReceiver 使用前,需要进行注册监听(xml和代码两种方式) ,不使用时需