Android截屏word截图怎么截屏的几种方法总结

Android开发小技巧 | 一句命令搞定截屏 - 简书
Android开发小技巧 | 一句命令搞定截屏
-- 作者 谢恩铭 转载请注明出处
一句命令搞定截屏
在安卓开发中, 我们很多时候都要用到截屏这个功能。
有时是为了演示, 有时是为了报告问题(比如在Bugzilla, Jira, Redmine等Bug跟踪系统中上传截图), 有时是为了发布应用时要用的截图。
今天就来聊聊如何快速只用一句简单的命令就搞定截图。
由繁到简的演进:三种方法
这篇主要讲Linux系统下如何Android手机截屏(当然了,Windows下也类似,可以自行尝试):
首先你的Linux中要安装了adb(也就是Android Debug Bridge,可以在你下载的Android的SDK的platform-tools文件夹中找到,只要把路径加入PATH环境变量就可以)。
而且你的Android手机须要开启了Develop options (开发者选项,要开启好像一般是在Settings(设置)里的About device(关于本机)中按7次Build number那个地方),如下:
那么截屏有哪几种方式呢?应该有很多,这里提供由繁到简的三种方法,也记录了小编从事Android开发之后的截屏方法的“演进”。哈哈,以前是挺蠢萌的(话外音:小编你只有蠢,没有萌,好不...):
1. 手动+adb命令
用你的手机的组合键来截屏(一般是同时按下Home键和电源键),然后用adb pull来取回本地:
adb pull /手机的截屏图片保存路径/xxx.png
2. 纯adb命令
1.使用screencap这个命令,配合adb命令来实现截图并保存到手机的/sdcard目录中:
adb shell screencap -p /sdcard/hello.png
2.用adb pull将手机中的文件取回本地:
adb pull /sdcard/hello.png
成功运行上面两行命令之后,你的家目录~中就会多出一个hello.png的图片。
当然了,截图时注意不要锁屏,不然截出来就是黑屏。
3. Shell函数+命令
第二种用adb命令的方式已经比较简单快捷了。但是,作为程序员,难道每次截屏都要输入这两个命令吗?简直不能忍。
程序员要学会“偷懒”
一般Ubuntu(或其他Linux发行版,例如Fedora)中默认的Shell程序是Bash。因此我们其实可以在.bashrc中写一个函数:
1.用你惯用的文本编辑器打开.bashrc这个bash的配置文件,位于你家目录中:
vim ~/.bashrc
2.在.bashrc里加入以下的函数(名字是droidshot 。当然了,你可以随便取什么名字):
# For Android Device Screenshot
function droidshot() {
adb shell screencap -p /sdcard/$1.png && adb pull /sdcard/$1.png
3.保存,退出。然后,用source命令使修改立即生效:
source ~/.bashrc
4.之后,使用很简单,在终端中输入:
droidshot hello
hello就是你传给droidshot这个函数的第一个参数(你也可以随便取其他名字),相当于函数里那个$1。
因此,在你的家目录~下就会多了一个 hello.png的图片,就是你刚才先截图,保存到Android手机的/sdcard目录下,再从Android手机中用adb pull来取回到本地的那张屏幕截图。
screen.png这张截图就如上图这样,这张是在三星的Galaxy S7上截的。
是不是超级省事呢?以后你想创建其他截屏图片,只要在终端输入:
droidshot hehe
droidshot haha
等等,就可以在本地获得hehe.png,haha.png这些图片了。
下期我们继续分享Android开发小技巧。
万千情感皆有温度,
千万代码似有性格。
这里有原创教程,IT丛林......
和你一起探索程序人生。
我是,在巴黎奋斗的嵌入式软件工程师。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:“向着标杆直跑”
公众号「程序员联盟」( ProgrammerLeague )
我的慕课网课程:
《基于Python玩转人工智能最火框架_TensorFlow框架应用实践》
https://coding.imooc.com/class/176.html
《带你开发类似Pokemon Go的AR游戏》
https://www.imooc.com/learn/844
http://www.jianshu.com/p/e1c5835fee7d
我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动,转载请注明作者、出处、原文链接。
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
ADB,即Android debug bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 From:GitHub - mzlogin/awesome-adb: ADB Usage Complete / ADB 用法...
Android开发中我们有时候需要借助一些命令帮助更好的高效率定位解决问题,本文就来介绍一些可能有些隐藏的而却非常好用的命令,可以帮我们快速找到问题,这些命令都是本人在开发中实践总结,个人觉得非常实用,所以可能对于你不是很有用,但是了解也是很好的,而Android中的命令很...
Android开发中我们有时候需要借助一些命令帮助更好的高效率定位解决问题,本文就来介绍一些可能有些隐藏的而却非常好用的命令,可以帮我们快速找到问题,这些命令都是本人在开发中实践总结,个人觉得非常实用,所以可能对于你不是很有用,但是了解也是很好的,而android中的命令...
在父亲节即将到来之际, 比朗男装定制除了给您带来父亲节礼物以外, 本着 “授人与鱼,不如授人与渔” 的精神, 比朗男装旗舰店在6月12日下午, 诚邀各路英雄好汉, 品尝茶点,一起谈谈那些“男装生活美学”的学问。 戳:阅读原文,填写活动报名表吧! “男装生活美学”私享会 时间...
时间如白驹奔袭而过。都说时间能抚平伤痛。本为时间会带我离去。却不知亦不过自以为。曾数次脑海模拟人景。当梦降临,梦里人现。我亦做不到泰然处之。番幻梦亦可如实般惑。梦兮逐窈窕,梦君亦心哮。
今天拍摄途中,泓姐的一位朋友来访,休息期间他们闲聊起来,说起了这位朋友最近上了今日头条的事情,老朋友们都为他骄傲。但他轻声地说,最近他生病了,每天醒来都不知道自己在哪。因为工作的原因,他四处飞,今天在某国落脚,第二天又到了他乡,越忙起来,病越重。他还说,某次迟到后,客人对他...
平时我们总会习惯说等有时间了就怎么怎么,等有钱了就怎么怎么。好像我们总摆脱不了又穷又忙的生活。 很多时候感觉又穷又忙,其实是心理原因。 比如买衣服总是为了省钱买太多便宜不耐穿的而不舍得买一件品质好的衣服。 殊不知买一堆便宜衣服的总价远超过一件品质好的衣服的价钱,而其所体现的...
红霞 王汉文 你不动 是一片红叶 插入书中 作书笺收藏 你动 是一张红唇 魅力四射 勾人心魂 其实你呀 是一抹幻化的红霞 闪现眼前 深刻心间没有更多推荐了,
不良信息举报
举报内容:
Android中使用代码截图的各种方法总结
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!android截屏的几种方法
1. Surface.screenshot方法
Display display = getWindowManager().getDefaultDisplay();
Method mth = Surface.class.getDeclaredMethod("screenshot", int.class, int.class);
Bitmap bmp = (Bitmap)mth.invoke(null, display.getWidth(),display.getHeight());
OutputStream out = MainActivity.this.openFileOutput("screen.png", MODE_WORLD_READABLE);
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
out.close();
Log.i("zxp","capture succeed");
}catch(Exception e){
Log.e("zxp","unable capture screen: ",e);
即通过反射调用Surface的隐藏方法public static native Bitmap screenshot(int width, int height);。此方法需要android.permission.READ_FRAME_BUFFER权限,而这个权限只能授予系统应用。所以需要源码编译或使用plantform密钥签名。因为android项目是开源的,所以可以使用。
另外需要在AndroidManifext.xml中的manifest标签中添加android:sharedUserId="android.uid.system"
局限:只能在虚拟机或其他使用android源码中密钥编译的系统中使用。
2. 使用shell命令screencap,screenshot
screencap与screenshot用法
usage: screencap [-hp] [-d display-id] [FILENAME]
-h: this message
-p: save the file as a png.
-d: specify the display id to capture, default 0.
If FILENAME ends with .png it will be saved as a png.
If FILENAME is not given, the results will be printed to stdout.
---------------------------------------------------------------
usage: screenshot [-s soundfile] filename.png
-s: play a sound effect to signal success
-i: autoincrement to avoid overwriting filename.png
screencap与screenshot都可以截屏并保存为文件。但screencap可以将截取的图片直接打印到输出流。对于一些其他操作而不需要保存到文件时可以使用screencap。
局限:需要root权限。
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//转为灰色图片或其他操作
Bitmap bmp = convert2Grey(captureScreen());
//保存到文件
OutputStream out = openFileOutput("gray.png",
Context.MODE_WORLD_READABLE);
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
Log.i("zxp", "capture succeed");
} catch (Exception e) {
Log.e("zxp", "unable capture screen: ", e);
public Bitmap captureScreen() throws Exception {
Process pro = Runtime.getRuntime().exec("su -c screencap -p");
InputStream in = pro.getInputStream();
Bitmap bmp = BitmapFactory.decodeStream(in);
in.close();
pro.destroy();
public Bitmap convert2Grey(Bitmap img) {
int width = img.getWidth(); // 获取位图的宽
int height = img.getHeight(); // 获取位图的高
int[] pixels = new int[width * height]; // 通过位图的大小创建像素点数组
img.getPixels(pixels, 0, width, 0, 0, width, height);
int alpha = 0xFF && 24;
for (int i = 0; i & i++) {
for (int j = 0; j & j++) {
int grey = pixels[width * i + j];
int red = ((grey & 0x00FF0000) && 16);
int green = ((grey & 0x0000FF00) && 8);
int blue = (grey & 0x000000FF);
grey = (int) ((float) red * 0.3 + (float) green * 0.59 + (float) blue * 0.11);
grey = alpha | (grey && 16) | (grey && 8) |
pixels[width * i + j] =
Bitmap result = Bitmap.createBitmap(width, height, Config.RGB_565);
result.setPixels(pixels, 0, width, 0, 0, width, height);
3.View.getDrawingCache()
这个方法没有其他限制,但它只能取得调用者的图像。
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//因为调用者是被点击的button,所以只能取得该Button的图像
v.setDrawingCacheEnabled(true);
Bitmap bmp = v.getDrawingCache();
OutputStream out = openFileOutput("button.png",
Context.MODE_WORLD_READABLE);
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
Log.i("zxp", "capture succeed");
} catch (Exception e) {
Log.e("zxp", "unable capture screen: ", e);
上述代码的调用结果如下:
但可以调用顶级view取得整个activity的图像
public Bitmap getTopView(){
View view = getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
return view.getDrawingCache();
局限:该方法只能取得调用者view的图像,也就是说这不是实际意义上的“截屏”.
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.038 (s). 13 q(s)博客分类:
1. 采用API做法,这种做法的好处是不需要特殊的权限处理。不过在一种情况下不能用,就是在打开camera的情况下使用这种方法:
private static Bitmap takeScreenShot(Activity activity) {
// View是你需要截图的View
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap b1 =
b1 = view.getDrawingCache();
} catch (OutOfMemoryError e) {
// TODO: handle exception
// 获取状态栏高度
Rect frame = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.
System.out.println(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();
2.采用Surface的隐藏方法,不过这种方法需要的源码中重新build.
void takeScreenshot() {
// We need to orient the screenshot correctly (and the Surface api seems to take screenshots
// only in the natural orientation of the device :!)
mDisplay.getRealMetrics(mDisplayMetrics);
float[] dims = { mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels };
float degrees = getDegreesForRotation(mDisplay.getRotation());
boolean requiresRotation = (degrees & 0);
if (requiresRotation) {
// Get the dimensions of the device in its native orientation
mDisplayMatrix.reset();
mDisplayMatrix.preRotate(-degrees);
mDisplayMatrix.mapPoints(dims);
dims[0] = Math.abs(dims[0]);
dims[1] = Math.abs(dims[1]);
// Take the screenshot
mScreenBitmap = Surface.screenshot((int) dims[0], (int) dims[1]);
// mScreenBitmap = android.view.SurfaceControl.screenshot((int) dims[0], (int) dims[1]);
if (mScreenBitmap == null) {
// notifyScreenshotError(mContext, mNotificationManager);
// finisher.run();
Log.i("W", "mScreenBitmap null");
if (requiresRotation) {
// Rotate the screenshot to the current orientation
Bitmap ss = Bitmap.createBitmap(mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(ss);
c.translate(ss.getWidth() / 2, ss.getHeight() / 2);
c.rotate(degrees);
c.translate(-dims[0] / 2, -dims[1] / 2);
c.drawBitmap(mScreenBitmap, 0, 0, null);
c.setBitmap(null);
// Recycle the previous bitmap
mScreenBitmap.recycle();
mScreenBitmap =
// Optimizations
mScreenBitmap.setHasAlpha(false);
mScreenBitmap.prepareToDraw();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SS");
String name = sdf.format(new Date()) + ".jpg";
savePic(mScreenBitmap, name);
// Start the post-screenshot animation
// startAnimation(finisher, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels, statusBarVisible, navBarVisible);
3.采用命令的方式,这种方式的4.0之后都可以(包括4.0),如果要在程序中实现,需要系统权限。
screencap /mnt/sdcard/screen.png
4.0之后也提供screenrecord录制屏幕的方法:
screenrecord --h
Usage: screenrecord [options] &filename&
Records the device's display to a .mp4 file.
--size WIDTHxHEIGHT
Set the video size, e.g. "".
Default is the device's main
display resolution (if supported),
For best results,
use a size supported by the AVC encoder.
--bit-rate RATE
Set the video bit rate, in megabits per second.
Default 4Mbps.
--time-limit TIME
Set the maximum recording time, in seconds.
Default / maximum is 180.
Rotate the output 90 degrees.
Display interesting information on stdout.
Show this message.
Recording continues until Ctrl-C is hit or the time limit is reached.
浏览: 102975 次
来自: 苏州
不行啊,在页面上显示的背景是黑的啊,不是透明的啊!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'当前位置:
正文微信扫一扫分享到朋友圈
各种手机截屏方法汇总!值得收藏~
一、最早集成手机截屏的是新一代智能手机的老大哥,爱疯啦!iPhone手机截屏快捷键:同时按住Home和电源键。二、android手机中,三星的的用户不可谓不多。三星android手机截屏快捷键:同时长按Home和电源键。三、小米是后起之秀,更是年轻潮人们的首选。截屏快捷键:位于最左边的菜单键和音量减小键一起按。四、摩托罗拉--还记得它的经典广告吗?截屏快捷键:同时按下电源键+功能键(即最下面一排四个按键里,最左边一个,那个四方格)。五、HTC-曾经风靡全球。HTC截屏快捷键:按住关机键,同时按主页键。六、魅族--很潮很酷的样子。Flyme1.0的截图方法为:电源键+Home键;Flyme2.0的截图方法为:电源键+音量减。七、总结下:从各大品牌手机截屏快捷键来看, 其实就是几个物理按键的组合啦!频率最高:HOME(主页键) + POWER(电源)其次:电源键+音量减小键喜欢尝试的朋友不妨试试自己的机子是哪种方式哦.也算是一个消遣吧。有的小伙伴就问了,要是我的不是品牌机怎么办?你有两种选择:1)按照上述总结自己尝试一下。2)安装一个好用的截屏工具吧。如何查阅及分享1. 点击左上角松联通讯加关注2. 或直接查找公众号:松联通讯3. 或输入搜索号:tzsltx4. 点击右上角三个点标志--分享到朋友圈
分享给好友分享到微信朋友圈:第一步 打开微信底部扫一扫第二步 扫下面的文章二维码第三步 右上角点击转发下一篇:
相关文章Relevant
<li class="w first">从历史的角度来看,2017年有可能会为一些重大变化的“起头”,但不要期待很快就会有结果。文 | 韩福东来源:<li class="w first">习声回响,原声放送!<li class="w first">雾霾严重时你所在的省市公交车免费吗?<li class="w first">人的正常寿命是多少岁?按照密宗讲,是120岁.近代的虚云长老活到了一百二十岁.上次我去漳州佛光寺,妙智老和尚成就肉身菩萨...<li class="w first">前天,有微友发微信向“律师来了”咨询:我今年27岁,是一个全职妈妈,家在杭州.老公比我大5岁,也是杭州人,但他被公司外派...<li class="w first">不要去骗一个对你好的人,因为他不是对人人都好;一辈子碰到一个这样的人不容易.错过一辆车,可以等,错过一个人,也许就是一...<li class="w first">迪士尼新作《奇幻森林》今天跟大家见面了评分相当不错!老规矩,探片小分队提前试深浅总体上,这部电影还是很值进影院观看的单...<li class="w first">一中国女士从英国回来探亲,顺便带着她的洋老公和洋婆婆到中国旅游.这位女士有两个孩子,一个5岁,一个3岁,都是由她自己当全...<li class="w first">昨天,杭州的陈大姐接到前几天请假的保姆张阿姨从老家建德打来的电话,说自己的儿媳妇生了个儿子. 陈大姐连忙道喜祝贺,可是电...<li class="w first">就是他!他在三鹿奶粉事件中被记过处分,罚酒三杯后不降反升,当上了国家食药监局副局长、药品安全总监.而三聚氰胺案爆料人蒋...

我要回帖

更多关于 ipad pro截屏怎么截图 的文章

 

随机推荐