2014-07-24 76 views
2

截圖方法,我一直試圖讓這個代碼片段內工作。這段代碼在一個Activity中運行良好,但是我無法讓它在這個片段中工作。採取內部片段

當我點擊一個按鈕,它會調用takeScreenshot方法。

這是截圖代碼:

public Bitmap takeScreenshot() { 
    View rootView = findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
    return rootView.getDrawingCache(); 
} 

的「findViewById」這不是由於片段被認可。

我已經試過:

View rootView = getView().findViewById(android.R.id.content).getRootView(); 

,但它不工作要麼。我得到

07-25 09:37:32.746: E/AndroidRuntime(31221): FATAL EXCEPTION: main 
07-25 09:37:32.746: E/AndroidRuntime(31221): java.lang.NullPointerException 
07-25 09:37:32.746: E/AndroidRuntime(31221): at com.dream3ncore.thefinalwordcounts.level01.Song01.takeScreenshot(Song01.java:763) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at com.dream3ncore.thefinalwordcounts.level01.Song01.onClick(Song01.java:152) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at android.view.View.performClick(View.java:4211) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at android.view.View$PerformClick.run(View.java:17362) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at android.os.Handler.handleCallback(Handler.java:725) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at android.os.Looper.loop(Looper.java:137) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at android.app.ActivityThread.main(ActivityThread.java:5227) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at java.lang.reflect.Method.invokeNative(Native Method) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at java.lang.reflect.Method.invoke(Method.java:511) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
07-25 09:37:32.746: E/AndroidRuntime(31221): at dalvik.system.NativeStart.main(Native Method) 

任何幫助將不勝感激。

回答

2

Fragment的UI是你Activity的一個子集的UI。 getView()將在Fragment中僅返回其自己的視圖層次結構。您可以將您的電話改爲getView()getActivity(),這可行。或者,我相信您可以撥打getView().getRootView(),並首先避免查找android.R.id.content

0

在onCreateView方法,其中,所述片段是查看充氣。這也是我將截圖代碼綁定在一起的觀點。

view.setDrawingCacheEnabled(true); 
view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 
Bitmap screenshot = Bitmap.createBitmap(view.getDrawingCache())); 
view.setDrawingCacheEnabled(false); 

對於那些沒有截圖綁到一個動作,我不得不創建一個與該片查了postDelay處理程序準備好了。我用這樣的東西

private void waitForView() { 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       if (isVisible()) { 
        // create the view snapshot 
        view.setDrawingCacheEnabled(true); 
        view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 
        Bitmap screenshot = Bitmap.createBitmap(view.getDrawingCache())); 
        view.setDrawingCacheEnabled(false); 
       } else { 
        waitForView(); 
       } 
      } 
     }, 100); 
    } 

這對片段和處理視圖花費時間來生成相對較好。