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的權限需要添加。 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!