直播平臺軟體開發,監聽WebView滑動到底部的兩種方式

zhibo系統開發發表於2022-04-13

直播平臺軟體開發,監聽WebView滑動到底部的兩種方式

第一種方式:自定義webView,實現onScrollChanged方法,通過介面的方式暴露出去。

public class ScrollChangeLisWebView extends WebView {
    public ScrollChangeLisWebView(Context context) {
        super(context);
    }
    //實時滑動監控
    //引數l代表滑動後當前位置,old代表原來原值
    @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 ScrollInterface mScrollInterface;
    //監控滑動
    public void setOnCustomScrollChangeListener(ScrollInterface scrollInterface) {
        this.mScrollInterface = scrollInterface;
    }
    public interface ScrollInterface {
        public void onSChanged(int l, int t, int oldl, int oldt);
    }
}

使用:

 webView.setOnCustomScrollChangeListener(new ScrollChangeLisWebView.ScrollInterface() {
        @Override
        public void onSChanged(int l, int t, int oldl, int oldt) {
            //WebView的總高度  有縮放比例
            float webViewContentHeight = webView.getContentHeight() * webView.getScale();
            //WebView的現高度
            float webViewCurrentHeight = (webView.getHeight() + webView.getScrollY());
            if ((webViewContentHeight - webViewCurrentHeight) < 10) {  //儘量不要用==0,有時候精度問題導致無法完全相等(自己除錯即可)  
              // 已經處於底端
              //.....
            }
        }
    });


常見的坑:

1.如果前端頁面height寫成100%,會導致webView.getScrollY()一直為0,這個我沒碰到,百度有看到別人出現這種;如果出現這種,找前端溝通調整即可。

2.由於原生WebView相容性很差,如果使用騰訊的X5WebView,webView.getScrollY()也會一直為0,這時候使用webView.getWebScrollY()即可,這種我碰到了。

第二種方式:注入js

  webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView webView, String s) {
                super.onPageFinished(webView, s);
                //滑動監聽
                String startSave = "\n" +
                        "document.getElementById(\"page-container\").addEventListener('scroll',function () {\n" +
                        "console.log(this.scrollHeight);\n" +
                        "console.log(this.scrollTop);\n" +
                        "console.log(this.clientHeight);\n" +
                        "if(this.scrollHeight-this.scrollTop - this.clientHeight < 50){\n" +
//                      "if(this.scrollHeight-this.scrollTop == this.clientHeight){\n" +     精度計算問題   會有一點誤差  無法相等
                        "console.log(\"到達底部\");\n" +
                        "window.java.open(\"到達底部\"); \n" +
                        "}\n" +
                        "});";
                //注入
                webView.loadUrl("javascript:" + startSave);
            }
        });
        
        //注入、反射
        webView.addJavascriptInterface(new Object() {
            @JavascriptInterface
            public void open(String msg) {//滑動到底端
//.....
//這裡更新UI失敗的話,可以用runOnUiThread或者webView.post(new Runnable() {}
            }
        }, "java");


注入js的方式需要與前端約定好呼叫方法,比如page-container就是前端頁面的一個標籤。

以上就是直播平臺軟體開發,監聽WebView滑動到底部的兩種方式, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2886883/,如需轉載,請註明出處,否則將追究法律責任。

相關文章