2011-06-15 259 views
1

我需要拍攝屏幕截圖並保存截屏。我需要這樣做,而不使用任何連接到PC或沒有根除手機。每當事件被觸發時,我都需要這樣做。例如,當廣告在遊戲中顯示時......或者當遊戲結束並顯示蛇的得分等時。您可以讓我知道我如何做到這一點。我看到一些tutorilas,他們給的代碼,但似乎沒有工作Android - 拍攝屏幕截圖

private void getScreen() 
    { 
    View content = findViewById(R.id.layoutRoot); 
    Bitmap bitmap = content.getDrawingCache(); 
    File file = new File("/sdcard/test.png"); 
    try 
    { 
     file.createNewFile(); 
     FileOutputStream ostream = new FileOutputStream(file); 
     bitmap.compress(CompressFormat.PNG, 100, ostream); 
     ostream.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
+0

po可以複製http://stackoverflow.com/questions/5929403/take-screenshot-of-android-screen-and-save-to-sd-card和http://stackoverflow.com/questions/5939987/android-take-通過代碼截圖 – DynamicMind 2011-06-15 07:18:37

回答

0

你能給爲當您運行的代碼是什麼不起作用的更多信息?它沒有捕獲你想要的東西嗎?它會崩潰嗎?

確保你與你的根佈局正確改變R.id.layoutroot ...除此之外,它似乎像它會工作...

<com.example.android.snake.SnakeView 
android:id="@+id/snake" 
    android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      tileSize="24" 
      /> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
    android:id="@+id/text" 
     android:text="@string/snake_layout_text_text" 
     android:visibility="visible" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:gravity="center_horizontal" 
     android:textColor="#ff8888ff" 
     android:textSize="24sp"/> 
</RelativeLayout> 

編輯...

因此,例如,如果您使用該佈局,則只需將其放在那裏,則應該將R.id.layout更改爲R.id.snake,這是因爲此行:android:id="@+id/snake"

我不認爲有一個簡單的方法來找到/得到一個視圖的「根」佈局的ID(如果你想採取任何東西截圖手機顯示。

我只是檢查發射器和另一個應用程序,似乎像大多數應用程序被放置到一個FrameLayout與ID /內容,所以你可以嘗試使用android.R.id.content,但沒有保證,這將工作每次...

+0

它說它無法解析R.id.layoutroot。所以你可以讓我知道我怎樣才能將它映射到正確的layoutroot。 – Vaali 2011-06-15 13:55:56

+0

你可以發佈你的main.xml或佈局文件,用於你想要拍攝截圖的視圖嗎?其中至少有一個...... – Matthieu 2011-06-15 14:11:32

+0

我對這個知之甚少......我粘貼了snakelayout.xml。這是你正在談論的還是有另一個文件。 – Vaali 2011-06-15 14:28:32

1

你必須enable the cache第一,然後調用getDrawingCache()。

+0

謝謝。它解決了我的問題的一部分。 – Vaali 2011-06-15 21:59:10

1
View ve = findViewById(R.id.loyout); 
     ve.setDrawingCacheEnabled(true); 
     Bitmap b = ve.getDrawingCache(); 

     String extr = Environment.getExternalStorageDirectory().toString() 
       + "/SaveCapture"; 
     myPath = new File(extr); 

     if (!myPath.exists()) { 
      boolean result = myPath.mkdir(); 
      Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show(); 
     } 
     myPath = new File(extr, getString(R.string.app_name) + ".jpg"); 

     Toast.makeText(this, myPath.toString(), Toast.LENGTH_SHORT).show(); 
     FileOutputStream fos = null; 

     try { 
      fos = new FileOutputStream(myPath); 

      b.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
      fos.flush(); 
      fos.close(); 
      MediaStore.Images.Media.insertImage(getContentResolver(), b, 
        "Screen", "screen"); 


     } 

     catch (FileNotFoundException e) { 

      Log.e("Error", e + ""); 
     } 

     catch (Exception e) { 

      Log.e("Error", e + ""); 
     }