开发者社区> 自娱> 正文

[android]android自动化测试十二之代码控制截图

简介:
+关注继续查看
该方法适用于对某个Activity进行截图,不包含状态栏,在使用之前要保证view加载完毕才可以进行使用。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;

public class ScreenShot {
    // 获取指定Activity的截屏,保存到png文件
    private static Bitmap takeScreenShot(Activity activity) {
        // View是你需要截图的View
        View 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
    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 (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 程序入口
    public static void shoot(Activity a) {
        ScreenShot.savePic(ScreenShot.takeScreenShot(a), "sdcard/xx.png");
    }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
django 源码解析 -1 启动流程分析
Django是一款经典的Python Web开发框架,也是最受欢迎的Python开源项目之一。不同于Flask框架,Django是高度集成的,可以帮助开发者快速搭建一个Web项目。 从本周开始,我们一起进入Djaong项目的源码解析,加深对django的理解,熟练掌握python web开发。
11 0
Java8 获取参数名及Idea/Eclipse/Maven配置(转载)
在Java8之前,代码编译为class文件后,方法参数的类型固定,但是方法名称会丢失,方法名称会变成arg0、arg1....。而现在,在Java8开始可以在class文件中保留参数名,这就给反射带来了极大的遍历。像mybatis等需要使用反射机制获取方法参数的时候就可以不用像以前一样需要使用类似于@Para之类的注解。
6 0
一文读懂前端模块化(CommonJS、AMD、CMD、UMD、ES6)
一文读懂前端模块化(CommonJS、AMD、CMD、UMD、ES6)
7 0
2021全栈开发不完全指南(持续更新……)
2021全栈开发不完全指南(持续更新……)
8 0
HTTP协议细节,你学会了吗?
httpbin是requests作者Kenneth Reitz的项目,是一个使用flask制作的http协议演示项目。学习这个项目,我们大概可以获得两个小收获。
9 0
密码学杂谈 - 下
在数字计算机没有发明之前,加密都是对字符进行加密,一般采用的方法是字母替换,我把它称为 经典加密 。
7 0
从零开始学设计模式(三):原型模式(Prototype Pattern)
前面的一篇文章从零开始学设计模式(二):单例模式介绍了什么是单例模式以及单例模式的几种常见的实现方式。今天这篇文章接着介绍设计模式中的原型模式Prototype。
8 0
1. Spring 简介 + Hello World
Spring 框架简介 在 Java 近20年的历史中,它经历过很好的时代,也经历过饱受诟病的时代。尽管有很多粗糙的地方,如 applet、企业级JavaBean(Enterprise JavaBean,EJB)、Java 数据对象(Java Data Object,JDO)以及无数的日志框架,但是作为一个平台,Java的历史是丰富多彩的,有很多的企业级软件都是基于这个平台构建的。Spring是Java历史中很重要的组成部分。
9 0
Win 上码农软件推荐
有便携和安装两种区分,能选择便携包尽量选择它。安装包类型是便携类软件的补充, 可以按需挑选。如果该软件能做到跨平台, 我会优先推荐.
7 0
Win 独享 WSL 并搭配 Oh My Zsh
Windows Subsystem for Linux(简称 WSL)是一个在 Windows 10/11 上能够运行原生 Linux 二进制可执行文件(ELF 格式)的兼容层。
7 0
+关注
自娱
阿里巴巴无线客户端性能与安全负责人 Gradle中文文档作者
158
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载