2014-01-27 51 views
0

我正試圖在onClick()中調用一個方法。方法takeScreenShot()需要參數(Activity活動)。我想要的截圖的活動是MainActivity.java。當我點擊按鈕時,我收到一個空指針。我知道活動MainActivity必須進行初始化,但我不明白要使用什麼除了將其設置爲空。它說,在這條線上活動爲null:初始化一個非空的活動

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

這就是所謂的一個onClick()像這樣

public void onClick(View view) { 

      new Thread(new Runnable() { 
       public void run() { 

      Bitmap screenShot = takeScreenShot(MainActivity); 
      String filename = "my_screenshot.png"; 
      savePic(screenShot, filename); 
       } 
      }).start(); 

     } 

我不明白如何聲明和初始化

Activity MainActivity; 

之前在onClick中使用的值不是null。如果我像這樣離開它,它是空的。我如何初始化它,以及我可以設置它的選項=以使其不爲空。

這裏是takeScreenShot方法:

public static Bitmap takeScreenShot(Activity activity) 
{ 
    View view2 = activity.getWindow().getDecorView(); 
    view2.setDrawingCacheEnabled(true); 
    view2.buildDrawingCache(); 
    Bitmap b1 = view2.getDrawingCache(); 
    Rect frame = new Rect(); 
    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); 
    int statusBarHeight = frame.top; 
    int width = activity.getWindowManager().getDefaultDisplay().getWidth(); 
    int height = activity.getWindowManager().getDefaultDisplay().getHeight(); 

    Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight); 
    view2.destroyDrawingCache(); 
    return b; 
} 

回答

4

我不明白如何聲明和初始化

你不初始化Activity。您需要發送對此方法的參考Activity。所以從您的Activity嘗試

YourClassName.takeScreenShot(MainActivity.this); 
1

的onclick方法提供了參數「觀點」:

onClick(View view) 

你應該能夠得到所謂的「的getParent」遞歸直到「父」是一個instanceof活動。假設onClick偵聽器已附加到您想要截圖的活動。