2013-04-09 37 views
0

是否有可能從視圖組對象獲取完整的位圖?整個視圖組到位圖

此代碼從當前屏幕上的視圖組中取出一個「屏幕截圖」,但我想要整個視圖,還有當前屏幕上沒有的視圖。

public void export(ViewGroup view){ 
    view.setDrawingCacheEnabled(true); 
    view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 
    Bitmap bitmap = view.getDrawingCache(true); 
} 

回答

0

在這裏,我用滾動型對整個事件以位圖 所以這裏u可以使用的,而不是像滾動視圖等linerlayout任何其它視圖組..

Bitmap map = loadBitmapFromView(getApplicationContext(),scrollView); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      map.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 

      //you can create a new file name "test.jpg" in sdcard folder. 
      File f = new File("/sdcard" +"/" + "mainemailpdf.jpg"); 
      f.createNewFile(); 
      //write the bytes in file 
      FileOutputStream fo = new FileOutputStream(f); 
      fo.write(bytes.toByteArray()); 
      bArray = bytes.toByteArray(); 
      // remember close de FileOutput 
      fo.close(); 

和loadBitmapFromView方法是:

public static Bitmap loadBitmapFromView(Context context, View v) { 

     Toast.makeText(context, 
       v.getMeasuredHeight() + "::::::::::::" + v.getMeasuredWidth(), 
       Toast.LENGTH_LONG).show(); 
     if (v.getMeasuredHeight() > 0) { 

      v.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

      Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), 
        Bitmap.Config.ARGB_8888); 

      Canvas c = new Canvas(b); 

      v.layout(0, 0, v.getWidth(), v.getWidth()); 

      v.draw(c); 

      return b; 

     } 

     return null; 

    } 

我希望它能幫助:)

的任何查詢令m我知道。

+0

感謝您的回答!它可以部分解決我的問題。我可以在自定義視圖中編寫一個onMeasure,以便我可以設置佈局參數。但用戶可以拖動視圖(平移),然後視圖並不總是在圖像上。 – Matt 2013-04-09 08:20:30

+0

這裏我們在Viewgroup右側添加視圖。因此,即使用戶將視圖拖放到主視圖組的所有視圖上,我們也可以獲取主視圖組的位圖。如果你有任何困惑發送示例代碼,我會爲你做。 – VenSan 2013-04-09 13:04:09

0

這是不可能的,因爲Android系統縮小位圖。 如果你的位圖尺寸是480 * 800,那麼它的尺寸是480 * 800 * 4 = 1536000. 與4的乘法是因爲每個像素是4個字節--RGBA。

對每個未縮放圖像的含義超過一個半。如果Android不會縮小圖像,則在幾次圖像加載後,您可能會收到 OutOfMemoryException。 作爲 你有3種選擇:

1)view.draw(畫布),你會得到的圖像(僅適用於什麼是真正被吸引到屏幕)

2)getDrawingCache的可見部分() - 會給你縮小的圖像。

3)創建自定義視圖,將位圖保存到磁盤並在請求時從那裏加載它