Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android窗口截屏

Android窗口截屏

編輯:關於Android編程

步驟:

第一步:獲取保存屏幕圖像的Bitmap對象;

第二步 得到狀態欄的高度;

第三步 獲取屏幕圖像的高度;

第四步 創建新的Bitmap對象 並截取除了狀態欄的其他區域;

第五步 將屏幕圖像保存到sd卡的根目錄


代碼如下:

package com.example.activityproperty;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

	}

	@SuppressLint("NewApi") public void onClick_CaptureScreen(View view) {
		// 使用延遲運行 ,防止單擊按鈕時還沒有抬起就截取屏幕圖像
		new Handler().postDelayed(new Runnable() {

			@SuppressLint("NewApi") @Override
			public void run() {
				// 獲取窗口的頂層視圖對象
				View v = getWindow().getDecorView();
				v.setDrawingCacheEnabled(true);
				v.buildDrawingCache();

				// 第一步:獲取保存屏幕圖像的Bitmap對象

				Bitmap srcBitmap = v.getDrawingCache();

				Rect frame = new Rect();
				// decorView是window中的最頂層view,可以從window中獲取到decorView,然後decorView有個getWindowVisibleDisplayFrame方法可以獲取到程序顯示的區域,包括標題欄,但不包括狀態欄。
				getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);

				// 第二步 得到狀態欄的高度
				int statusHeight = frame.top;
				// 第三步 獲取屏幕圖像的高度
				Point outSize = new Point();

				getWindowManager().getDefaultDisplay().getSize(outSize);

				int width = outSize.x;

				int height = outSize.y;

				// 第四步 創建新的Bitmap對象 並截取除了狀態欄的其他區域
				Bitmap bitmap = Bitmap.createBitmap(srcBitmap, 0, statusHeight,
						width, height - statusHeight);

				v.destroyDrawingCache();

				FileOutputStream fos = null;

				try {
					File file = File.createTempFile("capture", ".jpg",
							new File("/sdcard"));

					fos = new FileOutputStream(file);

					if (null != fos) {
						// 第五步 :將屏幕圖像保存到sd卡的根目錄
						bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
						fos.flush();
						Toast.makeText(MainActivity.this,
								"保存成功" + file.getName(), 0).show();
					}else{
						
						Toast.makeText(MainActivity.this,"失敗", 0).show();
						
						}
					fos.close();

				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		}, 2000);
	}
}

注意操作SD的權限需要添加。

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