2013-02-20 55 views
0

android.webkit.WebView有capturePicture()來捕獲當前WebView的全部內容,但是您將如何爲網頁上的特定元素執行此操作?例如,您可能會在div中使用CSS定位多個圖像和文本元素。可能有很多元素,但我只想捕獲在WebView中呈現的div捕獲特定的WebView元素爲圖像格式?

我想出的唯一想法是僅將div作爲另一個WebView的整個HTML加載並調用capturePicture。另一個問題是如何將Picture對象轉換爲可以與iText庫(PNG,JPEG,GIF)一起使用的格式。有沒有更簡單的方法來實現這一點?

(我的應用程序的功能是輸出PDF文檔。)

回答

1

可以使用view.setDrawingCacheEnabled(true);捕捉視圖圖像。然後你必須創建一個方法來做到這一點。這裏是我的保存方法

void Save() { 
    if (null != view.getDrawable()) { 
     view.setDrawingCacheEnabled(true); 
     view.buildDrawingCache(); 
     save = view.getDrawingCache(); 
     final File myDir = new File(folder); 
     myDir.mkdirs(); 
     final Random generator = new Random(); 
     int n = 10000; 
     n = generator.nextInt(n); 
     final String fname = "StyleMe-" + n + ".png"; 
      file = new File(myDir, fname); 
     if (file.exists()) 
      file.delete(); 
     try { 
      final FileOutputStream out = new FileOutputStream(file); 
      save.compress(Bitmap.CompressFormat.PNG, 100, out); 
      out.flush(); 
      out.close(); 
      sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
        Uri.parse("file://" 
          + Environment.getExternalStorageDirectory()))); 
      Toast.makeText(getApplication(), "Image Saved", 
        Toast.LENGTH_SHORT).show(); 
     } catch (final Exception e) { 
      Toast.makeText(getApplication(), 
        "Something Went Wrong check if you have Enough Memory", 
        Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     final Toast tst = Toast.makeText(getApplication(), 
       "Please Select An Image First", Toast.LENGTH_LONG); 
     tst.setGravity(Gravity.CENTER, 0, 0); 
     tst.show(); 
    } 
    view.setDrawingCacheEnabled(false); 
} 
+0

在上面的答案中,捕獲DIV元素以創建圖像的想法在哪裏?這是爲了讓傻子? – YuDroid 2014-01-30 09:59:14

+0

@YuDroid。 View.getDrawingCache()它實際上捕獲視圖。作爲一個圖像。按照我上面的答案。你在開玩笑嗎? – k0sh 2014-01-30 20:18:23

+0

但按照問題「可能有很多元素,但我只想捕獲在WebView中呈現的div。」,您是如何得到特定元素的?這是我的問題。從其他視圖捕獲圖像很直觀。此外,當我的屏幕進入橫向模式時,我沒有獲得WebView的全部高度,即getContentHeight()沒有返回完整的HTML高度。如何處理這個? – YuDroid 2014-01-31 06:14:13