Android實現截圖功能(可根據該代碼進行擴展)(博客地址:http://blog.csdn.net/developer_jiangqq)
Author:hmjiangqq
Email:
[email protected]
有些時候我們在進行做分享功能或者截圖保存,今天寫了一個簡單的demo來實現截圖功能,並且把截圖保存到sdcard中.(當然這裡只是簡單的實現一下功能,當然還可以進行功能擴展.例如:搖一搖監聽事件然後截圖或者開啟一個固定的時間然後進行截圖操作)
廢話不多說,效果比較簡單,代碼也不多(已經添加詳細注釋了);
ScreenShotUtils.java
[java]
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();
// 根據坐標點和需要的寬和高創建bitmap
bitmap=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)方法就行,布局文件如下:
[html]
<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>
調用代碼:
[html]
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();
}