Android截图
2015-07-05 08:02
537 查看
Android截图很好的实现,从文档的发展,查看View有一个接口getDrawingCache(),这个接口可以得到View当调用这个接口的位图图像Bitmap。
抓取截图View在图像的某一个时刻。它包括addView此View所有的孩子View图像,比方在截取Activity时。图像是不会包括浮如今activity上方的对话框的
以下的代码是截取图像而且经过http post接口上传到server的样例,截图并上传的核心代码例如以下:
Screenshot.java
使用本文件时。须要向Androidproject的AndroidManifest.xml配置文件里加入两个权限:
抓取截图View在图像的某一个时刻。它包括addView此View所有的孩子View图像,比方在截取Activity时。图像是不会包括浮如今activity上方的对话框的
以下的代码是截取图像而且经过http post接口上传到server的样例,截图并上传的核心代码例如以下:
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(); } }
使用本文件时。须要向Androidproject的AndroidManifest.xml配置文件里加入两个权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/>
相关文章推荐
- Android studio中导入开源库出现com.android.ide.common.process.ProcessException 错误
- android依赖注入框架Dagger和Butterknife实战
- Android中万能的适配器的详细讲解(附源代码)
- android开发之一如何升级SDK
- 【Android】ImageView的src和background的区别以及两者的妙用
- 史上最详细的Android Studio系列教程三--快捷键
- 史上最详细的Android Studio系列教程四--Gradle基础
- android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)
- Activity内部Handler引起内存泄露的原因分析
- Android TimeLine 类时间戳,时间轴控件。
- android 布局中 gravity 和 layout_gravity 属性
- Android下的Junit单元测试
- Android5.1 - 通讯录建立群组
- android PopupWindow 自适应宽度
- android 通过获得dimens.xml中定义的大小来设置字体的大小
- android 内存优化方法
- Android开发使用MediaRecorder进行录音
- Android 内存管理 &Memory Leak & OOM 分析
- Android的帧动画补间动画,新手复习
- Android获取短信验证码