2012-11-21 6 views
2

J'essaie de capturer une image de la webiview, ça fonctionne quand j'essaye de charger l'URL depuis le web, mais quand j'essaye de charger un fichier html local dans les assets ou html dans une chaîne il crashs avec l'erreur suivante:Capture d'une image depuis webview loading local 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) 

Mon code est:

//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"); 

Répondre

2

cette erreur parce que votre largeur WebView et la hauteur est 0, vous devez donc Layout votre WebView d'abord, essayez ce code:

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 


        } 
       }); 

      } 
     } 

    }); 
+0

Merci! Ça a marché! – JosafaSSJ

+0

puis accepter la réponse –

+0

La seule modification que j'ai faite a été mise final dans le paramètre webview de la méthode onProgressChanged. public void onProgressChanged (vue WebView finale, int newProgress) { – JosafaSSJ