Android截图很好的实现,从文档的发展,查看View有一个接口getDrawingCache(),这个接口可以得到View当调用这个接口的位图图像Bitmap。

抓取截图View在图像的某一个时刻。它包括addView此View所有的孩子View图像,比方在截取Activity时。图像是不会包括浮如今activity上方的对话框的

以下的代码是截取图像而且经过http post接口上传到server的样例,截图并上传的核心代码例如以下:

Screenshot.java

  1. package com.example.scrmdemo;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.File;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.io.InputStreamReader;
  10. import java.io.OutputStream;
  11. import java.net.HttpURLConnection;
  12. import java.net.URL;
  13.  
  14. import android.app.Activity;
  15. import android.graphics.Bitmap;
  16. import android.graphics.Rect;
  17. import android.graphics.drawable.BitmapDrawable;
  18. import android.graphics.drawable.Drawable;
  19. import android.view.View;
  20.  
  21. public class Screenshot {
  22.  
  23. public static Bitmap takeScreenshotForView(View view) {
  24. view.setDrawingCacheEnabled(true);
  25. view.buildDrawingCache();
  26. Bitmap tempBit = view.getDrawingCache();
  27. Rect frame = new Rect();
  28. view.getWindowVisibleDisplayFrame(frame);
  29. int width = view.getWidth();
  30. int height = view.getHeight();
  31. Bitmap bitmap = Bitmap.createBitmap(tempBit, 0, 0, width, height);
  32. view.destroyDrawingCache();
  33. return bitmap;
  34. }
  35.  
  36. public static Bitmap takeScreenshotForActivity(Activity activity) {
  37. View view = activity.getWindow().getDecorView();
  38. view.setDrawingCacheEnabled(true);
  39. view.buildDrawingCache();
  40. Bitmap tempBit = view.getDrawingCache();
  41. Rect frame = new Rect();
  42. view.getWindowVisibleDisplayFrame(frame);
  43. int statusBarHeight = frame.top;
  44. int width = view.getWidth();
  45. int height = view.getHeight();
  46. Bitmap bitmap = Bitmap.createBitmap(tempBit, 0, statusBarHeight, width,
  47. height - statusBarHeight);
  48. view.destroyDrawingCache();
  49. return bitmap;
  50. }
  51.  
  52. public static Drawable BitmapToDrawable(Bitmap bitmap) {
  53. @SuppressWarnings("deprecation")
  54. BitmapDrawable bd = new BitmapDrawable(bitmap);
  55. Drawable drawable = (Drawable) bd;
  56. return drawable;
  57. }
  58.  
  59. public static boolean savePic(Bitmap bitmap, String fileName) {
  60. try {
  61. File file = new File(fileName);
  62. if (!file.getParentFile().exists()) {
  63. file.getParentFile().mkdirs();
  64. }
  65. FileOutputStream fos = null;
  66. fos = new FileOutputStream(file);
  67. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
  68. fos.flush();
  69. fos.close();
  70. return true;
  71. } catch (FileNotFoundException e) {
  72. e.printStackTrace();
  73. return false;
  74. } catch (IOException e) {
  75. e.printStackTrace();
  76. return false;
  77. }
  78. }
  79.  
  80. public static byte[] getBytes(Bitmap bitmap) {
  81. ByteArrayOutputStream out = new ByteArrayOutputStream();
  82. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
  83. try {
  84. out.flush();
  85. out.close();
  86. } catch (IOException e) {
  87. e.printStackTrace();
  88. }
  89. return out.toByteArray();
  90. }
  91.  
  92. interface ISharePicCallBack {
  93. public final static int SHARE_OK = 1;
  94. public final static int SHARE_NOTOK = 2;
  95.  
  96. public void shareResult(int resultCode, String output);
  97. }
  98.  
  99. public static void share(final String urlStr, final Bitmap bitmap,
  100. final ISharePicCallBack callBack) {
  101. new Thread() {
  102. public void run() {
  103. try {
  104. URL url = new URL(urlStr);
  105. HttpURLConnection httpConn = (HttpURLConnection) url
  106. .openConnection();
  107. httpConn.setDoOutput(true);
  108. httpConn.setDoInput(true);
  109. httpConn.setUseCaches(false);
  110. httpConn.setRequestMethod("POST");
  111. byte[] requestStringBytes = getBytes(bitmap);
  112. httpConn.setRequestProperty("Content-length", ""
  113. + requestStringBytes.length);
  114. httpConn.setRequestProperty("Content-Type",
  115. "application/octet-stream");
  116. httpConn.setRequestProperty("Connection", "Keep-Alive");
  117. httpConn.setRequestProperty("Charset", "UTF-8");
  118. OutputStream outputStream = httpConn.getOutputStream();
  119. outputStream.write(requestStringBytes);
  120. outputStream.flush();
  121. outputStream.close();
  122. if (HttpURLConnection.HTTP_OK == httpConn.getResponseCode()) {
  123. StringBuffer sb = new StringBuffer();
  124. String readLine;
  125. BufferedReader responseReader;
  126. responseReader = new BufferedReader(
  127. new InputStreamReader(
  128. httpConn.getInputStream(), "UTF-8"));
  129. while ((readLine = responseReader.readLine()) != null) {
  130. sb.append(readLine).append("\n");
  131. }
  132. responseReader.close();
  133. callBack.shareResult(ISharePicCallBack.SHARE_OK,
  134. sb.toString());
  135. } else {
  136. callBack.shareResult(ISharePicCallBack.SHARE_NOTOK, ""
  137. + httpConn.getResponseCode());
  138. }
  139. } catch (IOException e) {
  140. callBack.shareResult(ISharePicCallBack.SHARE_NOTOK, "");
  141. e.printStackTrace();
  142. }
  143. };
  144. }.start();
  145. }
  146. }

使用本文件时。须要向Androidproject的AndroidManifest.xml配置文件里加入两个权限:

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  2. <uses-permission android:name="android.permission.INTERNET"/>

版权声明:本文博客原创文章。博客,未经同意,不得转载。

Android截图的更多相关文章

  1. Android截图<包括Alertdiaog>

    1.使用的系统内部的截屏方法…… 2. public class MainActivity extends AppCompatActivity { private static final Strin ...

  2. Android截图命令screencap与视频录制命令screenrecord

    Android截图命令screencap 查看帮助命令 bixiaopeng@bixiaopeng ~$ adb shell screencap -v screencap: invalid optio ...

  3. 【Android测试】Android截图的深水区

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/6113059.html 需求 这两天遇到这样一个事情,因为某 ...

  4. Python实现对Android截图

    背景: 测试过程中,总是需要对Android设备进行截图,然后在截图中标注问题描述: 手动方式: 1.使用adb scrrencap /sdcard/screen.png 命令对Android设备进行 ...

  5. Android截图截取弹框AlertDialog

    1:效果如图 2:权限 <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" ...

  6. 关于android截图的一些方法

    这里只记录一些链接,对于我的需求,只需要, public static String createScreenShot(View v)     {        //测试截屏功能    SimpleD ...

  7. Android截图命令screencap

    查看帮助命令 bixiaopeng@bixiaopeng ~$ adb shell screencap -v screencap: invalid option -- v usage: screenc ...

  8. Android应用截图和SurfaceView截图问题总结

          最近在做android截图应用的过程遇到很多问题,接触了好些截图方法,但是还是不能实现SufaceView截图功能.今天就把我尝试过的方法总结下,希望把我惨痛的经历写出来后能够帮助到要做此 ...

  9. Android之高效率截图

    本文来自网易云社区 作者:孙圣翔 在一张Android手机上截图有好多办法,为了能够高效率的截图,我几乎把所有的方法都尝试了一般.走了好多路,也遇到了好多的问题. 只是想记录下这其中的不容易. 下面所 ...

随机推荐

  1. linux zombie process相关学习

    1. zombie process是什么? zombie process是那些在系统中已经死掉的process, 通过ps -A | grep defunct可以查看系统中有多少zombie proc ...

  2. Selenium执行测试脚本稳定性的一些经验分享交流

    Selenium执行测试脚本稳定性的一些经验分享交流 公司的自动化WEB测试框架IATA已上线运行了一段时间,期间发现一些脚本稳定性的问题,与大家分享一下. CASE执行游览器:ie firefox ...

  3. ASP.NET Web Service应用发布到IIs怎么做

    首先把你写的webservice Publish 到 一个文件夹 D:\MyWebService 下,在IIS下的website里面new一个虚拟目录,别名(Alias)随便输一个(这个别名是用于别的 ...

  4. Berkeley DB 使用

    http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html UNIX/LINUX平台下的数据库种类非常多,参考资料1中 列举了其中的大部 ...

  5. 9个杀手级 JVM 编程语言

    9个杀手级 JVM 编程语言 Java虚拟机已经不再是仅仅局限在 Java 了,很多语言提供了脚本转换,可以让其他的程序在java虚拟机上运行,这样能够让更多的开发者能够依靠JVM在Java平台上大有 ...

  6. poj 2299 树状数组求逆序数+离散化

    http://poj.org/problem?id=2299 最初做离散化的时候没太确定可是写完发现对的---由于后缀数组学的时候,,这样的思维习惯了吧 1.初始化as[i]=i:对as数组依照num ...

  7. makefile 学习一

    近期在学习nginx,由于实在linux下,一些代码须要用makefile文件来编译,比較节省时间. 由于在nginx中加入一个新的模块假设用./configure方法来加入,特别是当你的代码有错时, ...

  8. CentOS修改yum更新源

    1. 在修改前先备份该文件 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2. 修改更新源配置文 ...

  9. 搜索树SVN的树的时候遇到的乱码问题

    public void listDirectoryNode(SVNRepository repository, String dirUrl, FileNode node) { String curre ...

  10. Extjs4.0.7 实现Grid的嵌套

    网上相关资料非常少,我看过的大多是Extjs 3.0 急以前版本的解决方案. 比如:http://mikhailstadnik.com/ext/examples/nested-grid.htm  (E ...