今天做Android项目的时候用到了屏幕快照这个东西,就是如何将屏幕截屏下来并进行保存。虽然不难,但是记录下来,以备不时。代码直接拷贝进项目中即可使用。

屏幕快照ScreenShot类:

package com.cloudclassroom.student.common;import java.io.FileOutputStream;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;
import android.widget.Toast;/*** @author Rickey* <p>* 2015年8月16日下午5:40:47** @TODO 屏幕快照 公共类*/
public class ScreenShot {/*** 获取指定Activity的截屏,保存到png文件* @param activity* @return*/private static Bitmap takeScreenShot(Activity activity) {// View是需要截图的ViewView view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap b1 = view.getDrawingCache();// 获取状态栏高度Rect frame = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;Log.i("TAG", "" + statusBarHeight);// 获取屏幕长和高int width = activity.getWindowManager().getDefaultDisplay().getWidth();int height = activity.getWindowManager().getDefaultDisplay().getHeight();// 去掉标题栏// Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight);view.destroyDrawingCache();return b;}/*** 保存到sdcard* @param b    位图* @param strFileName    保存路径*/private static void savePic(Bitmap b, String strFileName) {FileOutputStream fos = null;try {fos = new FileOutputStream(strFileName);if (null != fos) {b.compress(Bitmap.CompressFormat.PNG, 90, fos);fos.flush();fos.close();}} catch (Exception e) {Toast.makeText(CommonVariable.Context, "快照失败", Toast.LENGTH_SHORT).show();}}/*** 屏幕快照程序入口* @param activity    需要获得快照的activity实例*/public static void shoot(Activity activity) {//此处的第二个参数改为自己的保存路径+文件名即可ScreenShot.savePic(ScreenShot.takeScreenShot(activity), FileHelper.imgPath + FileHelper.getPNGPictureFileName());}
}

上面的代码中,我使用了同一文件管理类FileHelper类,此类就是负责管理所以文件的存储路径以及创建文件夹,如果是直接将文件保存在SD卡根目录中, 可以不用创建文件夹(即下面都是白说,可以不用理会。),直接将路径写入即可。

同一文件管理类FileHelper类:

package com.cloudclassroom.student.common;import java.io.File;import android.os.Environment;/*** @author Rickey* <p>* 2015-07-28 2:37:33 PM** @TODO 文件操作类*/
public class FileHelper {/*** sd卡目录*/public static final String sdkPath = Environment.getExternalStorageDirectory().getPath() + "/CloudClassroom_Student/";/*** 图片路径*/public static final String imgPath = sdkPath + "img/";/*** 使用时间作为图片文件名,如“120726113136817.png”** @param R_SRART_TIME* @return 文件全名*/public static String getPNGPictureFileName() {return System.currentTimeMillis() + ".png";}/*** sd卡是否可用** @return*/public static boolean isSDKEnable() {return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);}/*** create:zyf* <p>* create date:2015-7-28 下午4:28:03* <p>* 类名:FileHelper.java* <p>* 方法描述:文件是否存在,主要是创建父文件夹** @param fileName*/public static void isFileDirEx(String fileName) {isFileDirEx(new File(fileName));}public static void isFileDirEx(File file) {File parent = file.getParentFile();if (!parent.exists()) {parent.mkdirs();}}}

在使用FileHelper类之前,必须要先对文件路径进行创建,即必须要先执行isFileDirEx()方法对文件路径中出现的文件夹进行创建,然后才能进行文件的写入等操作。在我的项目中,由于我所有的activity都是继承我自定义的基类MainAPP类,所以我在MainAPP类中的onCreate()方法中添加下面一句就一劳永逸了~~如下:

FileHelper.isFileDirEx(FileHelper.imgPath + FileHelper.getPNGPictureFileName());//初始化创建图片保存路径父文件夹

到此,一切工作都已经准备完毕,现在可以调用,试试效果如何~~

我在我的界面中,定义一个按钮进行触发,在按钮的单击监听事件里执行下面代码:

@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根if (v == Button_Snapshot) {//快照ScreenShot.shoot(this);}}

哈哈,完美成功了~~~

至此,结束。第一篇稍微正规的博文。各路大神多多指教~~

Android屏幕快照相关推荐

  1. 做百度快照入门_如何为您的博客文章拍摄屏幕快照(入门指南)

    做百度快照入门 Do you want to add a screenshot to your blog post, but not sure of the best way to do it? Sc ...

  2. 计算Android屏幕解锁组合数

    计算Android屏幕解锁组合数 晚饭时和同事聊到安卓屏幕解锁时会有多少种解锁方案,觉得很有趣,吃完饭开始想办法解题,花了大概2个小时解决.思路如下: 使用索引值0-9表示从左到右.从上到下的9个点, ...

  3. php屏幕抓取,PHP抓屏函数实现屏幕快照代码分享

    * 屏幕快照 $im = imagegrabscreen(); imagepng($im, "myscreenshot.png"); * 抓取一个窗口(IE为例) $browser ...

  4. android屏幕适配的目的,Android 不同分辨率下屏幕适配的实战方案与经验总结

    Android 开发中,屏幕适配是一大考点,几乎每一场面试,都不会落下这个问题,这个问题说简单也简单,说难也难,当然对于有过真实的适配经验的人来说,这个根本不算什么问题,从坑里爬过的人,自然知道这其中 ...

  5. 鸿洋android屏幕适配四部曲-传送门

    鸿洋android屏幕适配四部曲-传送门 两分钟理解Android中PX.DP.SP的区别 https://blog.csdn.net/donkor_/article/details/77680042 ...

  6. 【Android应用开发】分享一个录制 Android 屏幕 gif 格式的小技巧

    因为写博客总是需要录制 Android 软件的演示效果, 研究了将近一小时找到了合适的工具; 录制流程 : -- 1. 录制 Android 手机屏幕内容 : 使用 拍大师 软件录制 Android ...

  7. Android 屏幕适配

    一.适配方式之dp 名词解释 分辨率:480*800,1280*720.表示物理屏幕区域内像素点的总和.(切记:跟屏幕适配没有任何关系) 因为我们既可以把1280*720 的分辨率做到4.0 的手机上 ...

  8. AppLaunchScreen/Screenshot(启动图/屏幕快照)输出规范

    启动图需要做7套,必须为 PNG 格式,且必须采用 RGB 颜色空间 显示屏 设备 尺寸 启动图命名 6.5 英寸超视网膜显示屏 iPhone XS Max 1242px × 2688px Defau ...

  9. Android屏幕方向调整的两种方式

    Android屏幕方向调整 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术 ...

最新文章

  1. 用树莓派DIY血液检测仪,准确率不输专业设备,成本连十分之一都不到
  2. CentOS SSH安装与配置
  3. Web Service 实现分布式事务
  4. Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?
  5. 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传...
  6. 用SpringMVC参数传递时,解决get请求时中文乱码的问题
  7. 解决clipboard手机端无法复制的一种思路
  8. 17.2融合关键词的文本增强
  9. 破解版果冻手机动画主题for WM5 WM6
  10. 「运维有小邓」如何避免企业AD域弱密码
  11. Google浏览器升级为最新打开网页时缓慢 “正在建立安全连接..........”解决方法
  12. 中职计算机创新杯说课比赛课件,2017年全国中等职业学校“创新杯”  教师信息化教学说课大赛总结...
  13. 推荐 2 个 Spring Boot 工作流项目,轻松搞定工作流!
  14. 生死学学习笔记(一)
  15. PS3111开卡量产成功教程,PS3111+ASM235CM双头板子体验,DIY固态U盘小记+PS3111开卡工具
  16. js正则的test方法一会返回true一会返回false
  17. 金融监管背后有何真实意图?“数字人民币”是真正的金融创新吗?
  18. 请详细的描述PBR角色只做流程,用分解步奏一步步的详细描述出来
  19. matlab中pzmap函数不同图标,控制系统在matlab中的函数简介
  20. 数论笔记 · 佩尔方程

热门文章

  1. 高校毕业证、学位证丢失怎么办?
  2. 保留Hive分区的最新文件
  3. 接触了这款沙盒,我从月收入三千到三万
  4. cs224n Assignment 1:exploring_word_vectors
  5. C中的有符号数和无符号数之间的转换
  6. 完成各种项目生态环评工作丨全流程基于最新导则下的生态环境影响评价技术方法及图件制作与案例
  7. CSS外边距margin
  8. mysql安装与修改初始密码
  9. 不能摆脱别人的标准,再大的成就也总有遗憾
  10. 服务器网络打印总是自动删除,打印机无法打印打印文件时会自动删除,怎么回事啊?...