美文网首页
WebView 内部图片获取和位置的记录

WebView 内部图片获取和位置的记录

作者: 涛涛123759 | 来源:发表于2019-12-03 14:49 被阅读0次

一、WebView中图片点击放大,浏览显示

1、给这个html中所有的img标签添加点击事件,通过JS来调用java的方法。

 mWebView.setWebViewClient(new PrWebViewClient(mWebView) {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                //添加图片监听事件
                addImageClickListener();
                if (ivError.getVisibility() != View.VISIBLE) {
                    mWebView.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                    super.onReceivedError(view, errorCode, description, failingUrl);
                }
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
                if (request.isForMainFrame() || TextUtils.equals(request.getUrl().toString(), view.getUrl())) {
                }
            }

            @Override
            public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
             
            }

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler,
                                           SslError error) {
                handler.cancel();
            }
        });

              private void addImageClickListener() {
        // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,在还是执行的时候调用本地接口传递url过去
              String url = "javascript:(function(){"
                + "var imgs = document.getElementsByTagName(\"img\");"
                + "var imgUrl='';"
                + "var arr = new Array();"
                + "for(var i=0;i<imgs.length;i++){"
                + "  imgs[i].pos = i;"
                + "  arr[i] = imgs[i].src;"
                + "  imgUrl+=imgs[i].src+',,,';"
                + "    imgs[i].onclick=function(){  "
                + "        imageListener.openImage(arr,this.pos);  "
                + "    }  "
                + "}"
                + "})()";
        mWebView.loadUrl(url);
    }

2、获取图片的URL


 mWebView.addJavascriptInterface(new JavascriptInterface(),"imagelistner");
    /**
     * js通信接口
     */
    public class JavascriptInterface {
        public JavascriptInterface() {
        }

        @android.webkit.JavascriptInterface
        public void openImage(String[]  arr, int postion) {
            ArrayList<String> imgUrlList = new ArrayList<>();
            for (int i =0; i < arr.length; i ++) {
                imgUrlList.add(arr[i]);
            }
             //实现自己的图片浏览页面
          ImagePagerActivity.showActivity(context, imgsUrl, postion);
        }
        @android.webkit.JavascriptInterface
        public void openImage(String img, String chickUrl, int postion) {
            String[] imgs = img.split(",");
           ArrayList<String> imgsUrl = new ArrayList<>();
          for (int i =0; i < imgs.length; i ++) {
                imgsUrl.add(imgs[i]);
            }
            //实现自己的图片浏览页面
          ImagePagerActivity.showActivity(context, imgsUrl, postion);
        }

        //注解 很重要,必不可少
        @android.webkit.JavascriptInterface
        public void openImage(String img) {
            String[] imgs = img.split(",");
            int postion = 0;
            ArrayList<String> imgsUrl = new ArrayList<>();
            for (int i =0; i < imgs.length; i ++) {
                if (imgs[i].equals(chickUrl)){
                    postion = i;
                }
                imgsUrl.add(imgs[i]);
            }
            //实现自己的图片浏览页面
          ImagePagerActivity.showActivity(context, imgsUrl, postion);
        }
    }

二、webview 记录滑动位置

1、设置位置

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            mWebView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
                @Override
                public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                    //webviewcontent.getContentHeight 获取内容的高度
                    //webviewcontent.getScale 缩放比例
                    //webviewcontent.getHeight 现在高度
                    //webviewcontent.getScrollY 滚动高度
                    //此处是判断是否滑动到底部的代码
                    if ((mWebView.getContentHeight() * mWebView.getScale() - 100) <= (mWebView.getHeight() + mWebView.getScrollY())) {
                        //TODO 判断是否滑动到底部
                    }
                }
            });
        }
        mWebView.setWebViewClient(new PrWebViewClient(mWebView) {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }

            @Override
            public void onScaleChanged(WebView view, float oldScale, float newScale) {
                super.onScaleChanged(view, oldScale, newScale);
                float scale = oldScale < newScale ? oldScale : newScale;
                try {
                    String position = SPUtils.readStringFromConfig("web" + mNewsId, "0");
                    int webScrollY = (int) (Integer.valueOf(position) * scale);
                    view.setScrollY(DensityUtils.px2dp(NewsAudioDetailActivity.this, webScrollY));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

2、在onPause中记录滑动位置

    @Override
    protected void onPause() {
        super.onPause();
        if (mWebView != null) {
            int webScrollY = mWebView.getScrollY();
            //保存访问的位置
            SPUtils.saveStringToConfig("web" + mNewsId, String.valueOf(webScrollY));
        }
    }

``













相关文章

网友评论

      本文标题:WebView 内部图片获取和位置的记录

      本文链接:https://www.haomeiwen.com/subject/zqvcgctx.html