2016-04-01 18 views
0

Ich muss hier etwas falsch machen mit dem Speichern des Bildes oder etwas, als wenn ich es als PNG speichern, ist es ein leeres weißes Bild. Wenn ich es als JPEG speichere, ist es ein leeres schwarzes Bild.Android Webview, versucht, als Bilddatei speichern scheint nur ein leeres Bild zu speichern

Die Webansicht wird nach ca. 1 Sekunde in meine Anwendung geladen.

..... 
     webView = (WebView)findViewById(R.id.webview_1); 

     webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       //Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); 
       Bitmap b = getBitmapFromWebView(webView); 
       Canvas c = new Canvas(b); 
       view.draw(c); 

       try { 
        FileOutputStream fos = openFileOutput("test.png", Context.MODE_APPEND); 
        //fos = new FileOutputStream("/sdcard/" + "page.jpg"); 
        if (fos != null) { 
         b.compress(Bitmap.CompressFormat.PNG, 90, fos); 
         fos.close(); 
        } 
       } 
       catch(Exception e) { 
        System.out.println("-----error--"+e); 
       } 
      } 
     }); 

     WebSettings webSettings = webView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setLoadWithOverviewMode(true); 
     webSettings.setUseWideViewPort(true); 
     webView.addJavascriptInterface(new WebAppInterface(this), "Android"); 
     webView.loadUrl("file:///android_asset/World_display.html"); 



.... 
    public Bitmap getBitmapFromWebView(WebView wv) { 
     webView.setDrawingCacheEnabled(true); 
     webView.buildDrawingCache(true); 
     Bitmap bitmap = Bitmap.createBitmap(wv.getDrawingCache()); 
     webView.setDrawingCacheEnabled(false); 
     return bitmap; 
    } 

Antwort

0

Wie sich herausstellt, wird die Webansicht erst einige Zeit nach onPageFinished gemacht. All dieser Code in meinem onCreate speicherte ein leeres Bild, weil die Webansicht noch nicht gerendert wurde.

tun dies als separates Verfahren außerhalb onCreate Ended up:

public Bitmap getBitmapFromWebView(View v) { 
    webView.setDrawingCacheEnabled(true); 
    webView.buildDrawingCache(true); 
    Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache()); 
    try { 
     FileOutputStream fos = openFileOutput("test.png", Context.MODE_PRIVATE); 
     //fos = new FileOutputStream("/sdcard/" + "page.jpg"); 
     if (fos != null) { 
      bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos); 
      fos.close(); 
     } 
    } catch (Exception e) { 
     System.out.println("-----error--" + e); 
    } 
    return bitmap; 
} 

Und Aufrufen dieser Methode innerhalb einer Schaltfläche "Senden" Onclick in der onCreate.

0

Bitte versuchen Sie dies:

public static Bitmap getBitmapfromView(View v) { 
    Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), 
      Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    v.draw(canvas); 
    return bitmap; 
} 
Verwandte Themen