Android窗口截屏代碼

jopen 10年前發布 | 35K 次閱讀 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的權限需要添加。

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