android截屏
截屏是一个常用的操作,经常会有这种需求。
截屏的工具类
package com.fxb.screenshot; import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View; import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class ScreenShot { private static Bitmap getScreenBitmap(Activity activity){
View root = activity.getWindow().getDecorView();
root.setDrawingCacheEnabled(true);
root.buildDrawingCache();
Bitmap bitmapOri = root.getDrawingCache(); Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top; // int width = activity.getWindowManager().getDefaultDisplay().getWidth();
// int height = activity.getWindowManager().getDefaultDisplay().getHeight(); DisplayMetrics metric = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metric); Matrix matrix = new Matrix();
matrix.setScale(0.5f, 0.5f);
Bitmap bitmapSamll = bitmapOri.createBitmap(bitmapOri,
0, statusBarHeight, metric.widthPixels, metric.heightPixels - statusBarHeight,
matrix, true);
root.destroyDrawingCache();
return bitmapSamll;
} private static void saveBitmap(Bitmap bitmap, String path){
try {
FileOutputStream fos = new FileOutputStream(path);
if(fos != null){
bitmap.compress(CompressFormat.PNG, 90, fos);
fos.flush();
fos.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} public static void shoot(Activity activity, String path){
Bitmap bitmap = getScreenBitmap(activity);
saveBitmap(bitmap, path);
} }
测试类
package com.fxb.screenshot; import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import java.io.File; public class MainActivity extends Activity implements View.OnClickListener { public static final String TAG = "ScreenShot"; private TextView tvShow;
private Button btnShot; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView(){
tvShow = (TextView)findViewById(R.id.tvShow);
btnShot = (Button)findViewById(R.id.btnShot); btnShot.setOnClickListener(this);
} @Override
public void onClick(View v) {
if(v == btnShot){
String rootPath = Environment.getExternalStorageDirectory() + "/pictest";
File file = new File(rootPath);
if(!file.exists()){
file.mkdir();
}
// String path = Environment.getExternalStorageDirectory() + "/pictest/shot_" + System.currentTimeMillis() + ".png";
String path = rootPath + "/shot_" + System.currentTimeMillis() + ".png";
ScreenShot.shoot(this, path);
Log.i(TAG, "shot over!");
}
}
}
截屏保存在外置sd卡,需添加写外置存储的权限。
android截屏的更多相关文章
- Android截屏的几种实现
Android截屏的几种实现 微信公众号:CodingAndroid CSDN:http://blog.csdn.net/xinpengfei521 最近我们的APP要求需要截屏功能,网上看了看大致有 ...
- 【转】Android截屏
http://blog.csdn.net/xww810319/article/details/17607749 Android截屏浅析 链接:http://blog.sina.com.cn/s/bl ...
- Android 截屏与 WebView 长图分享经验总结
最近在做新业务需求的同时,我们在 Android 上遇到了一些之前没有碰到过的问题,截屏分享. WebView 生成长图以及长图在各个分享渠道分享时图片模糊甚至分享失败等问题,在这过程中踩了很多坑,到 ...
- Android 截屏的各种骚操作
本文公众号「AndroidTraveler」首发. 背景 在实际的应用场景中,Android 手机的截屏其实是很普遍的. 比如说 PPT 演示,比如说技术博客图文并茂讲解. 因此懂得 Android ...
- android截屏:保存一个view的内容为图片并存放到SD卡
项目中偶尔会用到截屏分享,于是就有了下面这个截屏的方法~ 下面得saveImage()方法就是保存当前Activity对应的屏幕所有内容的截屏保存. private void saveImage() ...
- Android 截屏检测
最近项目中新接到一个需求,对手机截屏进行检测并进行后续操作,类似于Snapchat,iOS具有先天优势,因iOS系统提供了相关API!Google无果之后原作者决定再次造轮子,为了持续表达对Rx的敬意 ...
- 快速简化Android截屏工作
1.安装Notepad++v6.9 2.插件管理器里Plugin Manager安装AndroidLogger 3.AndroidLogger里的capture功能抓取Android的当前屏幕截图到w ...
- Android手机截屏
刚开始打算做一个简单的截屏程序时,以为很轻松就能搞定. 在Activity上放一个按钮,点击完成截屏操作,并将数据以图片形式保存在手机中. 动手之前,自然是看书和网上各种查资料.结果发现了解的知识越多 ...
- Android开发笔记:安卓程序截屏方法
1,基于Android SDK的截屏方法 (1)主要就是利用SDK提供的View.getDrawingCache()方法.网上已经有很多的实例了.首先创建一个android project,然后进行L ...
随机推荐
- (网页)bootstrap模态框手动关闭(转)
在菜鸟教程上的bootstrap 上面的模态框上看到的: 下面是一些可与 modal() 一起使用的有用的方法. $('#identifier').modal({ keyboard: false }) ...
- 2018-05-27-computer-using-hints-电脑使用帮助[持续更新]
layout: post title: 2018-05-27-computer-using-hints-电脑使用帮助 key: 20180527 tags: ubuntu cuda cudnn ten ...
- ajax调用WebService实现数据库操作
首先说下测试环境和思路: 前端收集数据转换成json格式传输到后端,处理并存入数据库 1.数据库操作: [WebMethod] public string InsertPoint(string dat ...
- C#计算时间差 TimeSpan
TimeSpan的相关属性 Add:与另一个TimeSpan值相加. Days:返回用天数计算的TimeSpan值. Duration:获取TimeSpan的绝对值. Hours:返回用小时计算的Ti ...
- SpringBoot集成spring-data-jpa注入Bean失败
当项目结构正常(spring管理的Bean在SrpingBoot启动类平级或下级,支持spring扫描时),实现类上加 @Service注解,在实现类中注入dao层的Bean时,项目无法启动,无法找到 ...
- Cs231n课堂内容记录-Lecture2-Part1 图像分类
Lecture 2 课程内容记录:(上)https://zhuanlan.zhihu.com/p/20894041?refer=intelligentunit (下)https://zhuanlan. ...
- php获取ip地址所在的地理位置的实现
1,通过腾讯或者新浪提供的接口来获取(新浪和腾讯类似) <?php function getIPLocation($queryIP){ $url = 'http://ip.qq ...
- 创建属于其他Session的进程
创建其他Session(User)的进程需要拿到对应Session的Token作为CreateProcessAsUser的参数来启动进程. 修改有System权限的Token的TokenId为其他Se ...
- March 02nd, 2018 Week 9th Friday
Make hay while the sun shines. 勿失良机. Last night the toothache woke me up and it was very difficult f ...
- VMware安装系统时"无法创建新虚拟机: 不具备执行此操作的权限"的解决方案
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在VMware中安装操作系统时,遇到以下这种情况 问题主要出在虚拟机文件的位置选择上,不应该选在VMwa ...