當前位置:編程學習大全網 - 源碼下載 - 如何監聽webview的滾動事件

如何監聽webview的滾動事件

當webviw內容滾動壹定距離之後(這個具體不宜太大),toolbar和浮動操作按鈕動畫消失。

要實現這樣的效果,首先得監聽webview的滾動事件,至少需要獲得兩個方面的信息:

滾動的偏移量

滾動的方向

但是WebView並沒有對外提供壹個類似於setOnScrollChangedListener之類的監聽者,只有壹個如下的protected方法:

protected void onScrollChanged(final int l, final int t, final int oldl,

final int oldt) {

因此,我們需要自己寫壹個繼承webview的類,重寫這個方法,並對外提供壹個接口。

自定義WebView

package com.jcodecraeer.mobile.view;

import android.content.Context;

import android.util.AttributeSet;

import android.webkit.WebView;

/**

* Created by jianghejie on 15/7/16.

*/

public class ObservableWebView extends WebView {

private OnScrollChangedCallback mOnScrollChangedCallback;

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);

if (mOnScrollChangedCallback != null) {

mOnScrollChangedCallback.onScroll(l - oldl, t - oldt);

}

}

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 static interface OnScrollChangedCallback {

public void onScroll(int dx, int dy);

}

}

這裏我們定義了壹個OnScrollChangedCallback接口,其中dx和dy分別是滾動的時候,x和y方向上的偏移量。

這個偏移量是根據onScrollChanged方法的四個參數計算出來的:

mOnScrollChangedCallback.onScroll(l - oldl, t - oldt);

現在壹個對外提供了滾動參數的自定義webview就寫好了,讓我們看看如何在外部使用:

wv = (ObservableWebView) findViewById(R.id.scorllableWebview);

wv.setOnScrollChangedCallback(new OnScrollChangedCallback(){

public void onScroll(int dx, int dy){

//這裏我們根據dx和dy參數做自己想做的事情

}

});

當然,妳可能會說,為什麽不直接把onScrollChanged的四個參數直接暴露出來呢,其實那樣也是可以的,只是在我們項目中,dx和dy會更好用,所以我就這樣做了。暴露什麽數據出來完全取決於妳自己。

CoordinatorLayout的方式中,頂部toolbar退出是沒有動畫效果的,NestedScrollView只有壹開始滾動立馬就隨著移動。

如果我們想在底部再加壹個普通布局的菜單欄,也想在滾動的時候退出,貌似是沒法實現的。

  • 上一篇:什麽樣的車牌識別系統最好?
  • 下一篇:保險公司的經營管理
  • copyright 2024編程學習大全網