`
v5browser
  • 浏览: 1158375 次
社区版块
存档分类
最新评论

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>


分享到:
评论

相关推荐

    Android中解决WebView上下滑动监听问题

    总结起来,本文详细介绍了如何在Android中解决WebView滑动监听的问题,通过创建自定义的WebView子类和接口回调机制来实现滚动监听,以达到在用户滚动时执行特定逻辑的目的。这对于需要对WebView滚动事件做出响应的...

    Android实现WebView懒加载

    1. **监听滚动事件**:可以使用WebView的`OnScrollChangedCallback`监听用户的滚动行为。 2. **自定义WebViewClient**:重写`shouldInterceptRequest`方法,这个方法会在WebView尝试加载一个资源时被调用。在这里,...

    Android WebView实现网页滚动截图

    在实际应用中,我们需要监听WebView的滚动事件,例如通过重写`onScrollChanged()`方法。每次滚动后,我们可以调用这些辅助函数来获取当前屏幕的Bitmap,并将其合并到总截图中。由于滚动过程中可能会遇到固定定位...

    android仿微信可以滑动的底部导航栏

    在Android应用开发中,创建一个类似微信的可滑动底部导航栏是一项常见的需求。这个功能不仅可以提供用户友好的界面,还能有效地组织多个视图或功能模块。本教程将详细介绍如何利用ViewPager和Fragment来实现这一效果...

    WebView事件分发

    这可以通过监听WebView的滚动状态,例如通过`WebViewScrollView`的滚动回调来实现。 接下来,我们需要在WebView内部处理滑动事件。WebView内部也有自己的滑动逻辑,因此我们需要找到一种方式,在WebView无法再向上...

    整个webview截屏

    2. **监听Webview滚动**:为了获取Webview的滚动位置,我们需要实现`OnScrollChangeListener`接口。在滚动到底部时,触发截屏操作。由于Webview没有直接提供滚动监听接口,我们需要通过JavaScript和Java之间的交互来...

    Android底部滑动弹出窗口源码

    综上所述,这个"Android底部滑动弹出窗口源码"项目涵盖了Android开发中的多个关键点:自定义视图动画、WebView交互、底部导航菜单和顶部滑动菜单的实现。通过研究这个项目,开发者不仅可以学习到如何实现底部滑出...

    webview加载到底自动弹出gallery

    综上所述,实现"webview加载到底自动弹出gallery"的关键在于监听WebView的滚动事件,判断何时触发画廊的弹出,并正确处理用户从画廊返回的结果。通过这些步骤,我们可以创建一个更加互动和便捷的用户界面,提升应用...

    Android中WebView常见问题及解决方案汇总

    想知道用户是否已经滚动到页面底部,可以通过比较当前滚动位置和页面总高度来判断: ```java int currentScrollY = webView.getScrollY(); int contentHeight = webView.getContentHeight(); int webViewHeight = ...

    SlidingMenu:带有WebView的Android滑动菜单。 单击教程链接

    SlidingMenu库是由Jeff Gilfelt开发的,它为Android应用提供了侧滑菜单的实现,支持左右两侧滑动,以及多种滑动模式,如顶部滑动、底部滑动等。这个库不仅提供了基本的滑动功能,还允许开发者自定义动画效果,调整...

    android ScrollView 阻尼回弹效果 仿微信

    6. **监听滚动状态**:通过实现OnScrollChangeListener接口,可以监听ScrollView的滚动状态,比如是否已经滚动到底部或顶部。这样,我们可以在达到边界时触发回弹效果。 7. **优化性能**:为了保证流畅的用户体验,...

    Android-键盘挡住输入框终极解决办法

    4. **监听键盘状态**:通过注册`OnGlobalLayoutListener`监听器,我们可以检测到布局的变化,进而动态调整输入框的位置。 5. **使用CoordinatorLayout和Behavior**:在Android设计支持库中,CoordinatorLayout允许...

    弹框后禁止遮罩层后面页面滚动(兼容ios和android).zip

    3. 对于Android,可能还需要考虑Webview的滑动冲突,可能需要禁用Webview的滑动事件。 4. 弹框关闭后,恢复事件和CSS样式:重新绑定scroll和touchmove事件,并将body或主要内容区域的`overflow`属性恢复为`auto`,...

    下拉刷新 上拉更多 支持ListView GridView WebView

    例如,可以监听WebView的滑动事件,当达到顶部或底部时,通过JavaScript接口与原生代码通信,触发刷新或加载新的网页。 在实际应用中,为了提高开发效率和用户体验,许多开发者选择使用像SwipeRefreshLayout这样的...

    listview、scrollview、webview的下拉刷新上拉加载

    例如,通过注入JavaScript接口,让网页监听滚动事件,当到达顶部或底部时,通知Android端执行刷新或加载更多数据的操作。此外,也有一些第三方库,如SmartRefreshLayout,提供了对WebView下拉刷新和上拉加载的支持。...

    Android_ScrollView.zip_android_android scrollview_anriod viewfil

    5. **监听滚动事件**:可以通过添加OnScrollChangeListener监听ScrollView的滚动事件,实现自定义功能,例如在滚动到底部时加载更多数据。 6. **性能优化**:由于ScrollView会一次性加载所有子视图,所以对于内容...

    webview使用及使用自定义图片查看界面

    3. 滑动切换:如果有多张图片,用户应能通过滑动手势切换到下一张或上一张图片。 4. 返回功能:提供一个明显的返回按钮或手势,让用户可以退出图片查看模式回到之前的WebView界面。 为了实现这些功能,开发者可能...

    仿淘宝商品页上下滑动控件

    为了增强用户体验,还可以添加一些额外的功能,如回弹效果(OverScroll)、手势检测(GestureDetector)以支持快速滑动到顶部或底部,以及添加状态栏和导航栏的透明度变化效果,使整个界面看起来更连贯。 在实际...

    Android应用源码安卓源码(172个合集).zip

    douBanList(滚动到底部加载新的,软缓存,懒加载) Droid Wall 手机防火墙.zip FBReader修改epub快速加载.rar FiveChess五子棋.zip Flashlight灯光.zip GetSDTree(简单SD卡文件浏览器) hotel宾馆系统.zip ImageView ...

    基于Android的新闻客户端新闻浏览器

    5. **实现交互**:为了增强用户体验,可以监听WebView的滚动事件,或者通过`addJavascriptInterface()`方法实现JavaScript与Java代码的交互,比如点击新闻标题后跳转到详情页。 6. **处理错误**:添加WebViewClient...

Global site tag (gtag.js) - Google Analytics