分享

android WebView多标签,加速解决卡顿,视频播放笔记...

 创始元灵6666 2022-10-27 发布于河北

android硬件加速

   android:hardwareAccelerated="true"

WebView控件加速配置

 //加速丝滑
        getBinding().web.setLayerType(View.LAYER_TYPE_HARDWARE, null);

WebView基本配置

 @SuppressLint("SetJavaScriptEnabled")
    private void initWebSettings(WebView web) {
        WebSettings settings = web.getSettings();
        //支持js
        settings.setJavaScriptEnabled(true);
        // 解决图片不显示
        settings.setBlockNetworkImage(false);
        settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        //自适应屏幕
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        settings.setLoadWithOverviewMode(true);
        //设置可以支持缩放
        settings.setSupportZoom(false);
        //扩大比例的缩放
        settings.setUseWideViewPort(false);
        //设置是否出现缩放工具
        settings.setBuiltInZoomControls(false);
        //解决白屏问题,原因不明
        settings.setDomStorageEnabled(true);
        //多窗口
        settings.setSupportMultipleWindows(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        //加速丝滑
        getBinding().web.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    }

WebView视频播放

 webView.setWebChromeClient(new WebChromeClient() {

       

            //==========全屏播放视频相关==========
            @Override
            public void onShowCustomView(View view, CustomViewCallback callback) {
                webBinding.layoutFullVideo.setVisibility(View.VISIBLE);
                webBinding.layoutFullVideo.addView(view);
                hideState();
                mCallback = callback;
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 横屏
                super.onShowCustomView(view, callback);
            }

            @Override
            public void onHideCustomView() {
                if (mCallback != null) {
                    mCallback.onCustomViewHidden();
                }
                webBinding.layoutFullVideo.removeAllViews();
                webBinding.layoutFullVideo.setVisibility(View.GONE);
                if (!full) {
                    showState();
                }
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);//竖屏
                super.onHideCustomView();
            }
            //==========全屏播放视频相关==========

        });
        
private void showState() {//显示状态栏
        getWindow().clearFlags(WindowManager.LayoutParams.MATCH_PARENT);
    }

    private void hideState() {//隐藏状态栏
        getWindow().addFlags(WindowManager.LayoutParams.MATCH_PARENT);
    }

    //==========全屏播放视频相关==========
    private static String getTagByUrl(String url) {
        if (url.contains("qq")) {
            return "tvp_fullscreen_button"; // http://m.v.qq.com
        } else if (url.contains("youku")) {
            return "x-zoomin";              // http://www.youku.com
        } else if (url.contains("bilibili")) {
            return "icon-widescreen";       // http://www.bilibili.com/mobile/index.html
        } else if (url.contains("acfun")) {
            return "controller-btn-fullscreen"; //http://m.   无效
        } else if (url.contains("le")) {
            return "hv_ico_screen";         // http://m.le.com  无效
        }
        return "";
    }


    //  "javascript:document.getElementsByClassName('" + referParser(url) + "')[frontPage].addEventListener('click',function(){local_obj.playing();return false;});"
    private String getJs(String url) {
        String tag = getTagByUrl(url);
        if (TextUtils.isEmpty(tag)) {
            return "javascript:";
        } else {
            return "javascript:document.getElementsByClassName('" + tag + "')[frontPage].addEventListener('click',function(){onClick.fullVedio();return false;});";
        }
    }
    //==========全屏播放视频相关==========

WebView多窗口跳转数据加载
多窗口原理:
使用List集合储存FrameLayout,FrameLayout移除和添加就好了
这个功能代码太乱了,就不做笔记了

   webView.setWebChromeClient(new WebChromeClient() {

   @Override
            public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg) {
                newWindow();
                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(getBinding().web.getWebView());
                resultMsg.sendToTarget();
                return true;
            }
});


Webview下载

  //==========添加下载监听==========
        getBinding().web.getWebView().setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) -> {
            Uri uri = Uri.parse(url);
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);
        });

WebView按返回键

  @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (getBinding().web.getWebView().canGoBack()) {//若可以后退,则后退
                goBack();
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多