Android截图
来源:互联网 发布:绘制流程图的软件 编辑:程序博客网 时间:2024/06/11 09:45
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配置文件中添加两个权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET"/>
0 0
- Android截图
- android 截图
- Android截图
- android截图
- android截图
- android 截图
- android截图
- Android截图
- Android截图
- android surfaceview截图 系统截图
- 【拍照截图】Android 系统拍照和截图
- Android截图 调用图片照片并截图,相机照相截图
- Android 普通View截图 RecyclerView截图 ScrollView截图分享
- Android截图代码实现
- Android 截图实现(2)
- 使用android模拟器截图
- android 程序截图功能
- 【转】android屏幕截图
- Netty In Action中文版 - 第十二章:SPDY
- Ganglia API安装与使用
- 数据挖掘十大经典算法(8) kNN: k-nearest neighbor classification
- 103_slidingdrawer控件的使用
- poj 2115 C Looooops【数论】【欧几里得算法】
- Android截图
- Android Launcher分析和修改12——Widget列表信息收集
- hdu 1023 Train Problem II
- hdu 2049 不容易系列之(4)——考新郎(错排+排列组合)
- 关于UIp通讯自己主动发送的办法
- 好文收录
- Java基础温习 (8)Java内部类的使用小结
- view & viewGroup 调用顺序
- 13级中欧企业联合大学P-MBA班