2012-06-18 73 views
0

我嘗試了下面的代碼,但當我運行它給出了一個黑色的屏幕圖像在Android手機和模擬器上它給出了一個文件,通過打開這個文件我得到的消息預覽不可用Android:沒有根的屏幕捕獲

View v = activity.getWindow().getDecorView(); 

    v.setDrawingCacheEnabled(true); 
    v.destroyDrawingCache(); 

    int width = activity.getWindowManager().getDefaultDisplay().getWidth(); 
    int height = activity.getWindowManager().getDefaultDisplay().getHeight(); 
    v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
    v.layout(0, 0, width, height); 

    v.buildDrawingCache(true); 
    Bitmap b = Bitmap.createBitmap(v.getDrawingCache()); 
    v.setDrawingCacheEnabled(false); // clear drawing cache 

    FileOutputStream fos = null; 
    File fTree = new File(sdCardRoot,"/fi.png"); 
    fTree.createNewFile(); 

    try { 

     fos = new FileOutputStream(fTree,true); 
     if (null != fos) { 
      b.compress(Bitmap.CompressFormat.PNG, 90, fos); 
      fos.flush(); 
      fos.close(); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

請有人幫忙。謝謝。

+0

你在Click事件或直接在OnCreate中這樣做()? –

+0

直接在oncreate(); –

+0

可能您在活動視圖還在的onCreate()不抽,測試放一個按鈕,並在它的點擊寫你的屏幕捕捉代碼。 – user370305

回答

1

那好吧。您可能必須重寫下面的方法。問題是因爲你的視圖還沒有創建,甚至在你試圖獲得實際上不存在的背景,因此你沒有得到任何圖像。

試試這個,

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
    // add the entire code for getting the background within this and it will work 
} 

調用此方法,一旦你的圖繪,因此你會被重寫此方法得到所需的輸出。

+0

謝謝Andro先生的作品。 –

+0

歡迎隨時.. –

+0

您能否提供我,如果我用這個方法到另一個活動類,並調用它的服務,那麼它的工作原理或不..? –

0

這不會的onCreate()工作,因爲活動是可見的onCreate()完成之後。 當onCreate()完成時,觸發一些事件來運行您的代碼。可能是onClick()按鈕事件。