2

webiview から画像をキャプチャしようとしています。web から loadUrl を実行しようとすると機能しますが、ローカルの html ファイルをアセットにロードしたり、html を文字列にロードしようとすると、次のエラーでクラッシュします。

java.lang.IllegalArgumentException: width and height must be > 0
    at android.graphics.Bitmap.createBitmap(Bitmap.java:638)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:620)

私のコードは次のとおりです。

//Create the webview

WebView w = new WebView(this);

w.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        //get the picture from webview
        Picture picture = view.capturePicture();

        Bitmap b = Bitmap.createBitmap(picture.getWidth(),
                       picture.getHeight(), Bitmap.Config.ARGB_8888);

        Canvas c = new Canvas(b);

        picture.draw(c);

        FileOutputStream fos = null;

        try {

        String path = Environment.getExternalStorageDirectory().toString();
        File dir = new File(path, "/Movel/media/img/");
        if (!dir.isDirectory()) {
            dir.mkdirs();
        }
        String arquivo = "darf_"+ System.currentTimeMillis() + ".jpg";
        File file = new File(dir, arquivo);

        fos = new FileOutputStream(file);
        String imagePath =  file.getAbsolutePath();
        //scan the image so show up in album
        MediaScannerConnection.scanFile(MainActivity.this,  new String[] { imagePath }, 
                        null, new MediaScannerConnection.OnScanCompletedListener() {
                            public void onScanCompleted(String path, Uri uri) {

                            }
                            });

        if (fos != null) {
            b.compress(Bitmap.CompressFormat.JPEG, 90, fos);

            fos.close();
        }

        } catch (Exception e) {
        e.printStackTrace();
        }
    }
    });

setContentView(w);

String html = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'> " +
    "<title>Demo Html</title> </head> <body>  <H1>Testing One Two Three</H1> </body></html>";

//load from assets
//w.loadDataWithBaseURL("file:///android_asset/", Strings.converterParaElementosHTMLEspeciais(html), "text/html", "iso-8859-1", null);
//w.loadUrl("file:///android_asset/darf.html");
//w.loadUrl("https://www.google.com.br");
w.loadData(html, "text/html", "iso-8859-1");
4

1 に答える 1

2

WebView幅と高さが0であるため、このエラーが発生するため、最初に次のコードを試してくださいLayoutWebView

myWebView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            if (newProgress == 100) {
                view.post(new Runnable() {

                    @Override
                    public void run() {
                        // take the snapshot here


                    }
                });

            }
        }

    });
于 2012-11-21T13:58:39.423 に答える