如何在Android 5.0中捕获webview到位图?

时间:2015-05-23 06:25:42

标签: android webview bitmap

这里我对webview有一个简单的问题。

我的要求是捕获webview并将sdcard中的文件保存到我在下面使用的代码中。

以下用于从webview生成位图的代码

Webview to Bitmap:

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 = Bitmap.createBitmap(webview.getMeasuredWidth(),
               webview.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

       Canvas bigcanvas = new Canvas(bitmap);
       Paint paint = new Paint();
       int iHeight = bitmap.getHeight();
       bigcanvas.drawBitmap(bitmap, 0, iHeight, paint);
       webview.draw(bigcanvas);

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

   webview.setDrawingCacheEnabled(false);

下面的代码,用于将文件保存到内存中

保存为文件:

 File myDir = new File(Environment.getExternalStorageDirectory(), "Sample");
    if (myDir.exists()) 
    {
    } 
    else 
    {
        myDir.mkdir();
    }
    String fname = "sample" + ".png";
    file1 = new File(myDir, fname);

   if(bitmap!=null)
   { 

    try 
    {
        FileOutputStream out = new FileOutputStream(file1);
        bitmap.compress(Bitmap.CompressFormat.PNG, 10, out);
        out.flush();
        out.close();
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }}

但是这里的webview加载很好,但没有在android 5.0(棒棒糖)中完全捕获,如下图所示

enter image description here

我该如何解决这个问题?请给我一些建议或一些代码片段。

提前致谢..

2 个答案:

答案 0 :(得分:1)

U可以在画布上绘制视图,如下所示:

        Bitmap mBitmap;
        Layout webViewContainer
        mBitmap =  Bitmap.createBitmap(webViewContainer.getWidth(), webViewContainer.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(mBitmap);
        webViewContainer.draw(canvas);

答案 1 :(得分:1)

您需要在创建任何WebView之前调用WebView.enableSlowWholeDocumentDraw()。也就是说,如果布局中有任何WebView,请确保在调用下面显示的onCreate()中的setContentView()之前调用此方法。

$pdfBrc = new FPDI(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$fileBrc = realpath($output);

$pagecountBrc = $pdfBrc->setSourceFile($fileBrc);
for ($i = 1; $i <= $pagecountBrc; $i++) {
    $tplBrc = $pdfBrc->importPage($i);
    $sizeBrc = $pdfBrc->getTemplateSize($tplBrc);
    $orientationBrc = $sizeBrc['h'] > $sizeBrc['w'] ? 'P' : 'L';
    $pdfBrc->AddPage($orientationBrc);
    $pdfBrc->useTemplate($tplBrc, null, null, $sizeBrc['w'], $sizeBrc['h'], true);
}

$styleBrc = array(
            'position' => 1,
            'align' => 'C',
            'stretch' => false,
            'fitwidth' => true,
            'cellfitalign' => '',
            'border' => false,
            'hpadding' => 'auto',
            'vpadding' => 'auto',
            'fgcolor' => array(0, 0, 0),
            'bgcolor' => false, //array(255,255,255),
            'text' => true,
            'font' => 'helvetica',
            'fontsize' => 8,
            'stretchtext' => 4
);

$pdfBrc->write1DBarcode('KPV09008008986', 'C128B', 40, 2, 50, 15, 0.8, $styleBrc, 'N');

$pdfBrc->Ln();

它对我来说很好..