Android Webview,试图仅保存为图像文件似乎存储空白图像

时间:2016-04-01 14:37:13

标签: android webview

我必须在这里做错事,保存图像或其他东西,就像我将它保存为png一样,它是一张空白的白色图像。当我将其保存为JPEG时,它是一个空白的黑色图像。

webview在大约1秒后加载到我的应用程序中。

    .....
        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;
    }

2 个答案:

答案 0 :(得分:0)

请试试这个:

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;
}

答案 1 :(得分:0)

事实证明,在onPageFinished之后的某个时间,webview才会被呈现。我的onCreate中的所有代码都保存了一个空白图像,因为webview还没有被渲染。

在onCreate:

之外作为单独的方法完成此操作
    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;
}

从"提交"中调用此方法按钮onclick in onCreate。