哪个可以取代capturePicture功能

lol*_*shi 21 android capture webview

我有个问题.目前,WebView 的capturePicture弃用.

我想问一下是否有办法替换这个功能.我的意思是它可以捕获整个webview(不仅显示视图)

谢谢

lol*_*shi 25

我终于找到了解决方案.

一些代码

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();
                    }
                }
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

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"
/>
Run Code Online (Sandbox Code Playgroud)

  • 得到错误java.lang.IllegalArgumentException:宽度和高度必须> 0请帮助我 (2认同)

Yog*_*tia 16

使用draw() WebView的方法

示例:

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();
    }
});
Run Code Online (Sandbox Code Playgroud)