有些时候我们需要监听webview的滚动事件,比如我们想实现如下场景:

webview滑动事件监听

当webviw内容滚动一定距离之后(这个具体不宜太大),toolbar和浮动操作按钮动画消失。

要实现这样的效果,首先得监听webview的滚动事件,至少需要获得两个方面的信息:

  1. 滚动的偏移量

  2. 滚动的方向

但是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);
    }
}
View Code

相关文章:

  • 2021-09-30
  • 2022-12-23
  • 2022-03-10
  • 2022-01-16
  • 2022-02-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-23
  • 2021-08-22
  • 2021-12-06
相关资源
相似解决方案