2014-01-06 10 views
18

私は質問があります。現時点では、WebViewののキャプチャ画像であり、非推奨のです。capturePicture関数に替わるもの

機能を置き換える方法があるかどうか尋ねたいと思います。私は私が最終的に解決策を見つけたそれはWebViewののキャプチャ全体(だけではなくビューが表示されている)ことができます

おかげ

+1

( Lollipop)とbove、またこの質問を参照してください:http://stackoverflow.com/questions/30078157/webview-draw-not-properly-working-on-latest-android-system-webview-update –

答えて

20

を意味しました。

コード

public class WebViewActivity extends Activity { 

    private static WebView webView; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 

     webView = (WebView) findViewById(R.id.webView1); 
     webView.loadUrl("http://developer.android.com/reference/packages.html"); 
//  webView.loadUrl("http://developer.android.com/training/basics/firstapp/creating-project.html"); 

     webView.setWebViewClient(new WebViewClient() { 

      public void onPageFinished(WebView view, String url) { 
       // do your stuff here 
       webView.measure(MeasureSpec.makeMeasureSpec(
         MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED), 
         MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
       webView.layout(0, 0, webView.getMeasuredWidth(), 
         webView.getMeasuredHeight()); 
       webView.setDrawingCacheEnabled(true); 
       webView.buildDrawingCache(); 
       Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(), 
         webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

       Canvas bigcanvas = new Canvas(bm); 
       Paint paint = new Paint(); 
       int iHeight = bm.getHeight(); 
       bigcanvas.drawBitmap(bm, 0, iHeight, paint); 
       webView.draw(bigcanvas); 
       System.out.println("1111111111111111111111=" 
         + bigcanvas.getWidth()); 
       System.out.println("22222222222222222222222=" 
         + bigcanvas.getHeight()); 

       if (bm != null) { 
        try { 
         String path = Environment.getExternalStorageDirectory() 
           .toString(); 
         OutputStream fOut = null; 
         File file = new File(path, "/aaaa.png"); 
         fOut = new FileOutputStream(file); 

         bm.compress(Bitmap.CompressFormat.PNG, 50, fOut); 
         fOut.flush(); 
         fOut.close(); 
         bm.recycle(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 
    } 
} 

layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<WebView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/webView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
/> 
+2

エラーを取得するjava.lang.IllegalArgumentException:幅と高さが> 0である必要があります 助けてください –

+0

@ YogeshLakhotia:高さや幅を取得する前にwebviewが完全に読み込まれていることを確認してください。私はAsyncTaskを使用しました。私はなぜ、あなたのwebviewが完全にロードされる前にonPageFinishedを実行できるのかわかりません。私は同じ問題を抱えています。私はあなたのコードを見ないので、私はあなたにいくつかのケースを提案します。 – lolyoshi

+0

私の問題は解決しました...私はコードに答えました。 –

15

使用のいくつかのWebView

例のdraw()方法:APIレベル21を標的とするアプリの場合

ImageView imageview; 
WebView webview; 
class Background extends AsyncTask<Void, Void, Bitmap> 
{ 
    @Override 
    protected Bitmap doInBackground(Void... params) 
    { 
     try 
     { 
      Thread.sleep(2000); 
      Bitmap bitmap = Bitmap.createBitmap(webview.getWidth(), webview.getHeight(), Config.ARGB_8888); 
      Canvas canvas = new Canvas(bitmap); 
      webview.draw(canvas); 
      return bitmap; 
     } 
     catch (InterruptedException e){} 
     catch (Exception e){} 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Bitmap result) 
    { 
     imageview.setImageBitmap(result); 
    } 
} 


webview.setWebChromeClient(new WebChromeClient() 
{ 
    public void onProgressChanged(WebView view, int progress) 
    { 
     if(progress==100) 
      new Background().execute(); 
    } 
}); 
+1

は7-8の方法で働いていましたが、この方法だけが私の場合に働いていました:) – userAndroid

関連する問題