Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android截圖

Android截圖

編輯:關於Android編程

Android中截圖很好實現,從開發文檔中,可以看到View有一個接口getDrawingCache(),這個接口可以獲取View在調用這個接口時的位圖圖像Bitmap。

截圖是抓取View在某一個時刻的圖像,包含了addView到這個View的所有子View的圖像,比如在截取Activity時,圖像是不會包含浮現在activity上方的對話框的

下面的代碼是截取圖像並且經過http post接口上傳到服務器的例子,截圖並上傳的核心代碼如下:

Screenshot.java

package com.example.scrmdemo;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.View;

public class Screenshot {

	public static Bitmap takeScreenshotForView(View view) {
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap tempBit = view.getDrawingCache();
		Rect frame = new Rect();
		view.getWindowVisibleDisplayFrame(frame);
		int width = view.getWidth();
		int height = view.getHeight();
		Bitmap bitmap = Bitmap.createBitmap(tempBit, 0, 0, width, height);
		view.destroyDrawingCache();
		return bitmap;
	}

	public static Bitmap takeScreenshotForActivity(Activity activity) {
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap tempBit = view.getDrawingCache();
		Rect frame = new Rect();
		view.getWindowVisibleDisplayFrame(frame);
		int statusBarHeight = frame.top;
		int width = view.getWidth();
		int height = view.getHeight();
		Bitmap bitmap = Bitmap.createBitmap(tempBit, 0, statusBarHeight, width,
				height - statusBarHeight);
		view.destroyDrawingCache();
		return bitmap;
	}

	public static Drawable BitmapToDrawable(Bitmap bitmap) {
		@SuppressWarnings("deprecation")
		BitmapDrawable bd = new BitmapDrawable(bitmap);
		Drawable drawable = (Drawable) bd;
		return drawable;
	}

	public static boolean savePic(Bitmap bitmap, String fileName) {
		try {
			File file = new File(fileName);
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
			FileOutputStream fos = null;
			fos = new FileOutputStream(file);
			bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
			fos.flush();
			fos.close();
			return true;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}

	public static byte[] getBytes(Bitmap bitmap) {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
		try {
			out.flush();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return out.toByteArray();
	}

	interface ISharePicCallBack {
		public final static int SHARE_OK = 1;
		public final static int SHARE_NOTOK = 2;

		public void shareResult(int resultCode, String output);
	}

	public static void share(final String urlStr, final Bitmap bitmap,
			final ISharePicCallBack callBack) {
		new Thread() {
			public void run() {
				try {
					URL url = new URL(urlStr);
					HttpURLConnection httpConn = (HttpURLConnection) url
							.openConnection();
					httpConn.setDoOutput(true);
					httpConn.setDoInput(true);
					httpConn.setUseCaches(false);
					httpConn.setRequestMethod("POST");
					byte[] requestStringBytes = getBytes(bitmap);
					httpConn.setRequestProperty("Content-length", ""
							+ requestStringBytes.length);
					httpConn.setRequestProperty("Content-Type",
							"application/octet-stream");
					httpConn.setRequestProperty("Connection", "Keep-Alive");
					httpConn.setRequestProperty("Charset", "UTF-8");
					OutputStream outputStream = httpConn.getOutputStream();
					outputStream.write(requestStringBytes);
					outputStream.flush();
					outputStream.close();
					if (HttpURLConnection.HTTP_OK == httpConn.getResponseCode()) {
						StringBuffer sb = new StringBuffer();
						String readLine;
						BufferedReader responseReader;
						responseReader = new BufferedReader(
								new InputStreamReader(
										httpConn.getInputStream(), "UTF-8"));
						while ((readLine = responseReader.readLine()) != null) {
							sb.append(readLine).append("\n");
						}
						responseReader.close();
						callBack.shareResult(ISharePicCallBack.SHARE_OK,
								sb.toString());
					} else {
						callBack.shareResult(ISharePicCallBack.SHARE_NOTOK, ""
								+ httpConn.getResponseCode());
					}
				} catch (IOException e) {
					callBack.shareResult(ISharePicCallBack.SHARE_NOTOK, "");
					e.printStackTrace();
				}
			};
		}.start();
	}
}



使用本文件時,需要向Android工程的AndroidManifest.xml配置文件中添加兩個權限:






  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved