2013-04-19 107 views
-1

是否有可能得到的觀點背後的意見繪圖緩存?例如,我有一個半透明的視圖,我可以看到它背後的意見。那麼,我可以在後面的視圖中看到這個視圖的圖形緩存嗎?View.getDrawingCache()與背景半透明,

代碼在那裏我加入了以WM:

final View screenshotView = new View(this) { 
        @Override 
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
         super.onLayout(changed, left, top, right, bottom); 

         if (!changed) { 
          buildDrawingCache(); 
          final Bitmap bitmap = Bitmap.createBitmap(getDrawingCache()); 
          final File file = new File("/sdcard/test.png"); 
          try { 
           file.createNewFile(); 
           FileOutputStream ostream = new FileOutputStream(file); 
           bitmap.compress(Bitmap.CompressFormat.PNG, 100, ostream); 
           ostream.close(); 
          } catch (Exception e) { 
           Log.e(TAG, e.toString()); 
          } 
         } 
        } 
       }; 

WindowManager.LayoutParams screenShotViewLp = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.RGBA_8888); 
       screenShotViewLp.width = WindowManager.LayoutParams.MATCH_PARENT; 
       screenShotViewLp.height = WindowManager.LayoutParams.MATCH_PARENT; 
       screenShotViewLp.gravity = Gravity.LEFT | Gravity.TOP; 

       wm.addView(screenshotView, screenShotViewLp); 

回答

1

[編輯]根據我覺得這個答案不適合了這個問題的最後編輯。直接添加視圖到窗口管理INFACT討論引向一個衆所周知的問題:在Android的屏幕截圖的編程是不允許的,然後下面露出的想法似乎完全不切實際。 所以請不要低估。 [/編輯]

AFAIK這不能通過單個視圖的drawingCache實現。爲了得到背景中的其他視圖,您應該採用視圖樹中最頂端節點的drawingCache,即包含Activity的內容。獲得這樣的位圖是非常簡單的:

View root = currActivity.getWindow().getDecorView().findViewById(android.R.id.content); 
root.setDrawingCacheEnabled(true); 
Bitmap bmp = root.getDrawingCache(); 

然後,爲了只拿到位你感興趣的部分,你不得不根據View.getLocatonInWindow(int[])值裁剪生成位圖。

還沒有證明自己,但我相當有信心它應該工作。

+0

我的看法是從服務直接添加到窗口管理器沒有活動 – arts777

+0

這個複雜的事情有點:)你可以發佈用於連接視圖到'WindowManager'的代碼? –

+0

我已經添加了代碼的問題 – arts777