2010-09-17 130 views
10

我想開發一個應用程序,將android屏幕截圖..任何人都知道如何做到這一點..?這是類似於koushik duttas屏幕截圖..但用out根本沒有任何人有koushik dutta截圖應用程序正在工作..?是不是爲我工作..請讓我知道..提前感謝。在Android的屏幕捕獲

回答

0

我認爲這是不可能沒有根或SDK,對不起。

我很想被證明是錯誤的。

不是應用程序,但如果您有USB電纜,則可以在PC上安裝Android SDK,並使用androidscreencast從PC上截取屏幕截圖,而不必根your手機。

+0

HIニコラ,感謝您的reply..then做ü有任何工作的源代碼上的作品植根電話。作爲科希克duttas代碼不爲我工作? 。 – 2010-09-17 10:22:51

4

你可以嘗試這樣的事情

private RelativeLayout view; 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    view = (RelativeLayout)findViewById(R.id.relativeView); 

    View v1 = view.getRootView(); 

    v1.setDrawingCacheEnabled(true); 
    Bitmap bm = v1.getDrawingCache(); 
} 
19

比方說,你點擊一個按鈕:

findViewById(R.id.button1).setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Bitmap bitmap = takeScreenshot(); 
     saveBitmap(bitmap); 
    } 
}); 

之後,你需要這兩種方法:

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

public void saveBitmap(Bitmap bitmap) { 
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png"); 
    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(imagePath); 
     bitmap.compress(CompressFormat.PNG, 100, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } catch (IOException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } 
} 
+1

由於要保存的文件是.png,您是否應該使用CompressFormat.PNG而不是CompressFormat.JPG? (或將文件名改爲.jpg) – joshaidan 2013-04-19 20:23:18

+0

這只是代碼的基本示例。你可以使用任何你想要的:) – 2013-04-20 00:28:37

+2

我只是說,你有「screenshot.png」作爲文件名,但使用CompressFormat.JPEG作爲壓縮格式。不一致性。 – joshaidan 2013-05-10 20:33:37

3

的方法view.getDrawingCache()將首先嚐試檢索先前緩存的圖像。如果你想保證你的截圖是最新的,這可能會導致問題。例如,如果用戶點擊屏幕截圖按鈕,然後更改用戶界面,然後再次單擊它,除非您擦除緩存,否則第二個屏幕截圖將與第一個屏幕截圖相同。我覺得下面的方法更方便:

public Bitmap takeScreenshot() { 
    View rootView = findViewById(android.R.id.content).getRootView(); 
    Bitmap bitmap = Bitmap.createBitmap(rootView.getWidth(), rootView.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    rootView.draw(canvas); 
    return bitmap; 
}