2014-09-29 62 views
2

我想在没有UI交互的背景下在图像中转换HTML。我发现使用webview我们可以实现这一点。但Android已弃用webview.capturePicture();方法,并且我们还需要UI交互。如何在没有UI交互的情况下将HTML转换为图像?

+0

检查了这一点http://stackoverflow.com/questions/20942623/which-can-replace-capturepicture-function – jmhostalet 2014-09-29 14:03:55

+0

嗨,我已经通过这个例子。但同样这需要使用webview。和webview我们不能在后台服务中执行操作。因为我们不知道这项服务何时打电话。 – 2014-09-30 08:57:54

回答

0

首先在适当的布局参数代码实例化新WebView

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    WebView.enableSlowWholeDocumentDraw(); 
} 
WebView webView = new WebView(context); 
FrameLayout frameLayout = new FrameLayout(context); 
frameLayout.setLayoutParams(new FrameLayout.LayoutParams(512, 100)); 
webView.setLayoutParams(new FrameLayout.LayoutParams(512, FrameLayout.LayoutParams.WRAP_CONTENT)); 
frameLayout.addView(webView); 
webView.setDrawingCacheEnabled(true); 

然后设置一个WebViewClient听时的WebView加载完成:

webView.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(final WebView view, String url) { 
       return false; 
      } 
      @Override 
      public void onPageFinished(final WebView view, String url) { 
       Log.i("HTML", "page finished loading " + url); 
       view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
           View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
       view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 
       view.buildDrawingCache(true); 

       Bitmap b = Bitmap.createBitmap(view.getDrawingCache()); 
       // bitmap is ready 
       }) ; 

那么你的HTML载入WebView

webView.loadDataWithBaseURL(null, YOUR_HTML_STRING, "text/html", "UTF-8", null); 

重要提示:在所有步骤中确保webview的宽度和高度不为零;

相关问题