Android开发 获取当前activity的屏幕截图(转载)
2024-10-19 14:27:58
首先通过下面的函数获取Bitmap格式的屏幕截图:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public Bitmap myShot(Activity activity) { // 获取windows中最顶层的view View view = activity.getWindow().getDecorView(); view.buildDrawingCache(); // 获取状态栏高度 Rect rect = new Rect(); view.getWindowVisibleDisplayFrame(rect); int statusBarHeights = rect.top; Display display = activity.getWindowManager().getDefaultDisplay(); // 获取屏幕宽和高 int widths = display.getWidth(); int heights = display.getHeight(); // 允许当前窗口保存缓存信息 view.setDrawingCacheEnabled( true ); // 去掉状态栏 Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache(), 0 , statusBarHeights, widths, heights - statusBarHeights); // 销毁缓存信息 view.destroyDrawingCache(); return bmp; } |
得到bitmap格式的图片后,可以把它保存到sd卡中,也可以用下面的方式直接显示到ImageView上:
1
2
3
4
5
6
|
// 将bitmap转换成drawable BitmapDrawable bd= new BitmapDrawable(myShot()); imageView.setBackgroundDrawable(bd); imageView.setImageBitmap(myShot()); |
如果想写入sd中保存,可以使用下面的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
private void saveToSD(Bitmap bmp, String dirName,String fileName) throws IOException { // 判断sd卡是否存在 if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { File dir = new File(dirName); // 判断文件夹是否存在,不存在则创建 if (!dir.exists()){ dir.mkdir(); } File file = new File(dirName + fileName); // 判断文件是否存在,不存在则创建 if (!file.exists()) { file.createNewFile(); } FileOutputStream fos = null ; try { fos = new FileOutputStream(file); if (fos != null ) { // 第一参数是图片格式,第二个是图片质量,第三个是输出流 bmp.compress(Bitmap.CompressFormat.PNG, 100 , fos); // 用完关闭 fos.flush(); fos.close(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
dirName是输出的文件夹名称,filaName是输出的文件名,两者共同组成输出的路径,如“ /mnt/sdcard/pictures/shot.png”。还要注意在AndroidManifest中注册写入权限:
1
|
< uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />
|
最新文章
- MySQL数据表range分区例子
- asp.net 对数据库表增加,删除,编辑更新修改
- Yii2中的零碎知识点
- MySQL5.7(5.6)GTID环境下恢复从库思(qi)路(yin)方(ji)法(qiao)
- 在aspx怎么引用public string getPicurl(string picurl)?
- Hadoop1.x与2.x安装笔记
- @QueryParam和@PathParam比较
- 用命令行(CMD)中启动和关闭ORACLE服务
- MVC清除缓存设置+数据验证
- Oracle逐行累加求和
- EF 简单的 CRUD、分页 代码笔记
- QT断点续传(原理:需要在HTTP请求的header中添加Rang节,告诉服务器从文件的那个位置开始传输.格式为bytes 开始传输的位置)
- java常用类--字符串
- Linux 进程通信方式
- Wijmo 2017路线图
- 记录python接口自动化测试--简单总结一下学习过程(第十目)
- redux 知识点
- Could not find a package configuration file provided by &#39;ecl_threads&#39; ,.................couldn&#39;t find required component &#39;ecl_threads&#39;
- redis windows dll 下载
- 【纯代码】Swift - 自定义底部弹窗基类(可根据需要自行扩展内容)
热门文章
- i3wm配置记录
- 转:Android 签名验证机制(相当不错,强烈推荐)
- CocoSourcesCS 1
- Elasticsearch的javaAPI之query dsl-queries
- 【树莓派】【转载】Raspberry Pi (树莓派)折腾记
- 近期面试Android的一些面试题
- 读-《c++设计新思维-泛型编程与设计模式之应用》经典记录(英文书名:《modern c++ design》)
- <;译>;Spark Sreaming 编程指南
- IOS研究之App转让流程须知具体介绍
- 英特尔 Android* 开发者指南上的对等应用