截取Android任意View的圖像

最近開發中遇到了將webview截圖並分享的需求,研究了webview的幾個截圖方法都沒成功,最後用一個View通用的截圖方法成功了,這裏記錄下來,以便今後查閱

 private Uri captureWebView(WebView webView){
        Uri uri=null;
        webView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        webView.layout(0,0,webView.getWidth(),webView.getHeight());
        Bitmap bm=webView.getDrawingCache();
        try {
            File file=new File("/sdcard/capture.jpg");
            FileOutputStream outputStream=new FileOutputStream(file);
            bm.compress(Bitmap.CompressFormat.JPEG,80,outputStream);
            uri= Uri.fromFile(file);
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return uri;
    }


這個方法實際上對所有可視的View都通用,一般方法是:

  1. 從佈局中得到View的對象;
  2. 打開圖像緩存;
  3. 測量view的大小——view.measure();
  4. 發送位置和尺寸給自己及所有子view——view.layout();
  5. 從圖像緩存中得到bitmap;
  6. 將圖片處理成自己想要的格式;
後來經過查閱其他的資料,可以用view.buildDrawingCache();來完成第3、4步的工作了,所以更新後的截圖的核心方法是這樣的:
 view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bitmap=view.getDrawingCache();



發佈了41 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章