解决WebView滑动监听问题

有些时候我们需要监听webview的滚动事件,但WebView没有直接监听滑动的方法,看WebView的源码则会发现有一个protected void onScrollChanged(int l, int t, int oldl, int oldt)方法。

这个方法。是受到保护的所以我们无法直接使用,所以我们写一个加强的WebView,重写onScrollChanged方法并利用接口回调。

public class NewWebView extends WebView{

    private OnScrollChangeListener mOnScrollChangeListener;
    
    public NewWebView(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);
        // webview的高度
        float webcontent = getContentHeight() * getScale();
        // 当前webview的高度
        float webnow = getHeight() + getScrollY();
        if (Math.abs(webcontent - webnow) < 1) {
            //处于底端 
            mOnScrollChangeListener.onPageEnd(l, t, oldl, oldt);
        } else if (getScrollY() == 0) {
            //处于顶端
            mOnScrollChangeListener.onPageTop(l, t, oldl, oldt);
        } else { 
            mOnScrollChangeListener.onScrollChanged(l, t, oldl, oldt); 
        } 
    }
    
    public void setOnScrollChangeListener(OnScrollChangeListener listener) {
        this.mOnScrollChangeListener = listener; 
    }
    
    public interface OnScrollChangeListener {
        
        public void onPageEnd(int l, int t, int oldl, int oldt);
        
        public void onPageTop(int l, int t, int oldl, int oldt);
        
        public void onScrollChanged(int l, int t, int oldl, int oldt); 
    
    }
    
}

使用:

public class NewsActivity extends AppCompatActivity {

    private NewsWebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_news);
        mWebView = (NewsWebView) findViewById(R.id.web_view);
        mWebView.setOnScrollChangeListener(new NewsWebView.OnScrollChangeListener() {
            @Override
            public void onPageEnd(int l, int t, int oldl, int oldt) {
                Logs.d("已经到达地端");
            }

            @Override
            public void onPageTop(int l, int t, int oldl, int oldt) {
                Logs.d("已经到达顶端");
            }

            @Override
            public void onScrollChanged(int l, int t, int oldl, int oldt) {
            }
        });

做个笔记,便于下次使用😊

    原文作者:麦兜叮叮当
    原文地址: https://www.jianshu.com/p/377706b9e00b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞