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