Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android以當前Activity為基准進行截屏

Android以當前Activity為基准進行截屏

編輯:關於Android編程

概述:

首先要知道在Android中截取圖片大的方面可以分成兩個方向,一個是走底層一點,一個是走上層。因為樓主底層代碼比較弱,目前也只是停留在a+b的層面。所以,這篇博客只是在應用層上對屏幕進行一個截取。注意,上面討論的兩個方法與游戲中截圖是兩個概念,游戲中對屏幕的截取可以理解成一種假象。什麼樣的一種假象呢?沒有截屏!因為玩游戲的時候,一般是全屏,這個時候只要保存內存中已經保存了的圖像即可。

對於應用層面的截圖,它是基於Activity的。這裡只是說是基於Activity,不是說一定是要由Activity來截圖。那這句話不是矛盾了麼?要怎麼理解呢?例如,我現在想要截一張圖,那我總得有一個截圖的內容吧。就好像說我想把當前運行的程序給截個圖,那麼當前位於屏幕頂層的Activity就是這個內容了。這個我想要截一張圖中的我則可以是Activity,也可以是Service,也可以是廣播。


截圖類代碼:

下面大家可以看看已經封裝好了的截圖類的代碼,如下:

public class ScreenShot {

	// 獲取指定Activity的截屏,保存到png文件
	private static Bitmap takeScreenShot(Activity activity) {

		// View是你需要截圖的View
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bitmap = view.getDrawingCache();

		// 獲取狀態欄高度
		Rect frame = new Rect();
		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
		int statusBarHeight = frame.top;
		System.out.println(statusBarHeight);

		// 獲取屏幕長和高
		int width = activity.getWindowManager().getDefaultDisplay().getWidth();
		int height = activity.getWindowManager().getDefaultDisplay().getHeight();

		// 去掉標題欄
		Bitmap b = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width, height - statusBarHeight);
		view.destroyDrawingCache();
		return b;
	}

	// 保存到sdcard
	private static void savePic(Bitmap b, String strFileName) {
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(strFileName);
			if (null != fos) {
				b.compress(Bitmap.CompressFormat.PNG, 90, fos);
				fos.flush();
				fos.close();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void shoot(Activity activity) {
		ScreenShot.savePic(ScreenShot.takeScreenShot(activity), "sdcard/apic/image" + System.currentTimeMillis() + ".png");
	}
}

上面的注釋也留得相對詳細,這裡就不做過多說明了。說了也只是充字數,不必了。


使用示范:

ScreenShot.shoot(MainActivity.this);

運行圖例:


<後續再更新另一種方法。。。>

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved