package com.pps.screen.activity;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Rect;import android.util.Log;import android.view.View;/** * 進行截屏工具類 * @author jiangqingqing * @time 2013/09/29 */public class ScreenShotUtils {/** * 進行截取螢幕 * @param pActivity * @return bitmap */public static Bitmap takeScreenShot(Activity pActivity){Bitmap bitmap=null;View view=pActivity.getWindow().getDecorView();// 設定是否可以進行繪圖緩衝view.setDrawingCacheEnabled(true);// 如果繪圖緩衝無法,強制構建繪圖緩衝view.buildDrawingCache(); // 返回這個緩衝視圖 bitmap=view.getDrawingCache();// 擷取狀態列高度Rect frame=new Rect();// 測量螢幕寬和高view.getWindowVisibleDisplayFrame(frame);int stautsHeight=frame.top;Log.d("jiangqq", "狀態列的高度為:"+stautsHeight);int width=pActivity.getWindowManager().getDefaultDisplay().getWidth();int height=pActivity.getWindowManager().getDefaultDisplay().getHeight();// 根據座標點和需要的寬和高建立bitmapbitmap=Bitmap.createBitmap(bitmap, 0, stautsHeight, width, height-stautsHeight);return bitmap;}/** * 儲存圖片到sdcard中 * @param pBitmap */private static boolean savePic(Bitmap pBitmap,String strName){ FileOutputStream fos=null; try {fos=new FileOutputStream(strName);if(null!=fos){pBitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);fos.flush();fos.close();return true;}} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();} return false;} /** * * @param pActivity * @return 並且儲存sdcard成功返回true,否則返回false */public static boolean shotBitmap(Activity pActivity){return ScreenShotUtils.savePic(takeScreenShot(pActivity), "sdcard/"+System.currentTimeMillis()+".png");}}
然後直接在需要的地方進行調用就shotBitmap(pActivity)方法就行,布局檔案如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@android:color/black" > <TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="@android:color/darker_gray" android:text=" 這是類比的demo,點擊下面的按鈕直接,當然你還可以在此基礎上面進行擴充更多豐富的功能;(例如:搖一搖,或者開啟服務,N秒時間後自動儲存)"/> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/keji" android:scaleType="fitXY" android:layout_gravity="center_horizontal" android:layout_marginTop="10dip"/> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="點擊" android:layout_gravity="center_horizontal" android:layout_marginTop="10dip"/></LinearLayout>
調用代碼:
boolean result = ScreenShotUtils.shotBitmap(MainActivity.this);if(result){Toast.makeText(MainActivity.this, "成功.", Toast.LENGTH_SHORT).show();}else {Toast.makeText(MainActivity.this, "失敗.", Toast.LENGTH_SHORT).show();}
例子比較簡單,效果如下: