首先通过下面的函数获取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" />

 

最新文章

  1. MySQL数据表range分区例子
  2. asp.net 对数据库表增加,删除,编辑更新修改
  3. Yii2中的零碎知识点
  4. MySQL5.7(5.6)GTID环境下恢复从库思(qi)路(yin)方(ji)法(qiao)
  5. 在aspx怎么引用public string getPicurl(string picurl)?
  6. Hadoop1.x与2.x安装笔记
  7. @QueryParam和@PathParam比较
  8. 用命令行(CMD)中启动和关闭ORACLE服务
  9. MVC清除缓存设置+数据验证
  10. Oracle逐行累加求和
  11. EF 简单的 CRUD、分页 代码笔记
  12. QT断点续传(原理:需要在HTTP请求的header中添加Rang节,告诉服务器从文件的那个位置开始传输.格式为bytes 开始传输的位置)
  13. java常用类--字符串
  14. Linux 进程通信方式
  15. Wijmo 2017路线图
  16. 记录python接口自动化测试--简单总结一下学习过程(第十目)
  17. redux 知识点
  18. Could not find a package configuration file provided by &#39;ecl_threads&#39; ,.................couldn&#39;t find required component &#39;ecl_threads&#39;
  19. redis windows dll 下载
  20. 【纯代码】Swift - 自定义底部弹窗基类(可根据需要自行扩展内容)

热门文章

  1. i3wm配置记录
  2. 转:Android 签名验证机制(相当不错,强烈推荐)
  3. CocoSourcesCS 1
  4. Elasticsearch的javaAPI之query dsl-queries
  5. 【树莓派】【转载】Raspberry Pi (树莓派)折腾记
  6. 近期面试Android的一些面试题
  7. 读-《c++设计新思维-泛型编程与设计模式之应用》经典记录(英文书名:《modern c++ design》)
  8. &lt;译&gt;Spark Sreaming 编程指南
  9. IOS研究之App转让流程须知具体介绍
  10. 英特尔 Android* 开发者指南上的对等应用