【问题标题】:How to capture the webview to bitmap in android 5.0?如何在 android 5.0 中将 webview 捕获到位图?
【发布时间】:2015-05-23 18:46:04
【问题描述】:

这里我有一个关于 webview 的快速问题。

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

下面是从 webview 生成 Bitmap 的代码

Webview 到位图:

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(lollipop) 中没有完全捕获,如下图所示

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

提前谢谢..

【问题讨论】:

  • 不要测量 webview 而是捕获 webview 存在的布局并将其转换为位图。

标签: android webview bitmap


【解决方案1】:

你可以像这样在画布上绘制视图:

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

【讨论】:

  • 感谢您的回复...这里将 webviewcontainer 设置为空。你提供一些sn-p吗
  • 兄弟你的 webViewContainer(你的 webview 所在的布局..根据你的设置它可以是你的线性或相对布局),布局只是我在这里使用的一般 ViewGroup 术语。
  • 好的..感谢您的回复..但我找到了解决方案...无论如何再次感谢...
【解决方案2】:

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

if (Build.VERSION.SDK_INT >= 21) {
        webview.enableSlowWholeDocumentDraw ();
}

它对我来说很好用..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 2012-06-06
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多