android长截图工具下载,Android实现长截屏功能
本文实例为大家分享了Android实现长截屏功能的具体代码,供大家参考,具体内容如下
1、MainActivity
public class MainActivity extends AppCompatActivity {
ScrollView scrollView;
String sdRoot = Environment.getExternalStorageDirectory().getPath();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scrollView = (ScrollView) findViewById(R.id.scroll);
//权限
int permission_write= ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
int permission_read=ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE);
if(permission_write!= PackageManager.PERMISSION_GRANTED
|| permission_read!=PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "正在请求权限", Toast.LENGTH_SHORT).show();
//申请权限,特征码自定义为1,可在回调时进行相关判断
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
shootScrollView(scrollView, "sdRoot");
// takeScreenshot();
super.onWindowFocusChanged(hasFocus);
}
@Override
protected void onResume() {
super.onResume();
}
/**
* 截取scrollview的屏幕
* **/
public static Bitmap getScrollViewBitmap(ScrollView scrollView, String picpath) {
int h = 0;
Bitmap bitmap;
// 获取listView实际高度
for (int i = 0; i < scrollView.getChildCount(); i++) {
h += scrollView.getChildAt(i).getHeight();
scrollView.getChildAt(i).setBackgroundColor(Color.parseColor("#ffffff"));
}
Log.d(TAG, "实际高度:" + h);
Log.d(TAG, " 高度:" + scrollView.getHeight());
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
scrollView.draw(canvas);
// 测试输出
FileOutputStream out = null;
try {
out = new FileOutputStream(picpath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
if (null != out) {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
}
} catch (IOException e) {
}
Log.d("TAG", "getScrollViewBitmap() returned: " + bitmap.getHeight());
return bitmap;
}
private static String TAG = "Listview and ScrollView item 截图:";
/**
* 截图listview
* **/
public static Bitmap getListViewBitmap(ListView listView, String picpath) {
int h = 0;
Bitmap bitmap;
// 获取listView实际高度
for (int i = 0; i < listView.getChildCount(); i++) {
h += listView.getChildAt(i).getHeight();
}
Log.d(TAG, "实际高度:" + h);
Log.d(TAG, "list 高度:" + listView.getHeight());
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(listView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
listView.draw(canvas);
// 测试输出
FileOutputStream out = null;
try {
out = new FileOutputStream(picpath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
if (null != out) {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
}
} catch (IOException e) {
}
return bitmap;
}
// 程序入口 截取ScrollView
public static void shootScrollView(ScrollView scrollView, String picpath) {
// ScreenShot.savePic(getScrollViewBitmap(scrollView, picpath), picpath);
ScreenShot.saveMyBitmap(getScrollViewBitmap(scrollView, picpath), picpath);
}
// 程序入口 截取ListView
public static void shootListView(ListView listView, String picpath) {
ScreenShot.savePic(getListViewBitmap(listView,picpath), picpath);
}
private void takeScreenshot() {
Date now = new Date();
android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);
try {
// image naming and path to include sd card appending name you choose for file
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";
// create bitmap screen capture
View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
File imageFile = new File(mPath);
FileOutputStream outputStream = new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
openScreenshot(imageFile);
} catch (Throwable e) {
// Several error may come out with file handling or OOM
e.printStackTrace();
}
}
private void openScreenshot(File imageFile) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(imageFile);
intent.setDataAndType(uri, "image/*");
startActivity(intent);
}
}
2.ScreenShot
public class ScreenShot{
// 获取指定Activity的截屏,保存到png文件
public 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;
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();
return b;
}
// 保存到sdcard
public static void savePic(Bitmap b, String strFileName) {
FileOutputStream fos = null;
Log.d("TAG", "savePic() returned: " );
try {
fos = new FileOutputStream(strFileName);
if (null != fos) {
b.compress(Bitmap.CompressFormat.PNG, 90, fos);
Log.d("TAG", "savePic() returned: " + b.getHeight());
fos.flush();
fos.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 程序入口 截取当前屏幕
public static void shootLoacleView(Activity a, String picpath) {
ScreenShot.savePic(ScreenShot.takeScreenShot(a), picpath);
}
/**
* 保存bitmap到SD卡
* @param bitName 保存的名字
* @param mBitmap 图片对像
* return 生成压缩图片后的图片路径
*/
@SuppressLint("SdCardPath")
public static String saveMyBitmap(Bitmap mBitmap, String bitName) {
String path = Environment.getExternalStorageDirectory()+"/"+bitName+".png";
File f = new File(path);
try {
f.createNewFile();
} catch (IOException e) {
System.out.println("在保存图片时出错:" + e.toString());
}
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
} catch (Exception e) {
return "create_bitmap_error";
}
try {
fOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
// File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg");
// FileOutputStream out = null;
// try {
// out = new FileOutputStream(file);
// mBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
// System.out.println("___________保存的__sd___下_______________________");
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
// try {
// out.flush();
// out.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
return path;
// Toast.makeText(HahItemActivity.this,"保存已经至"+Environment.getExternalStorageDirectory()+"下", Toast.LENGTH_SHORT).show();
}
}
3.xml
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scroll"
tools:context=".MainActivity">
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android长截图工具下载,Android实现长截屏功能相关推荐
- android 加花工具下载,Android 代码混淆并加花
APK安全: 代码混淆且加壳防止反编译 1.用到的工具jd-gui-0.3.5.windows dex2jar-0.0.9.15 IDAProv6.8 C32Asm DexFixer Windowss ...
- java网页截图_Java实现的简单网页截屏功能示例
本文实例讲述了Java实现的简单网页截屏功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.AWTException; import java.a ...
- html2canvas动态截图,html2canvas.js按界面元素截屏功能演示
HTML 导入代码模板: Document .td-nav-tabs { padding-left: 0; margin-bottom: 0; list-style: none; height: 50 ...
- android实现长截屏,Android实现全屏截图或长截屏功能
本文实例为大家分享了Android实现全屏截图或长截屏功能的具体代码,供大家参考,具体内容如下 全屏截图: /** * 传入的activity是要截屏的activity */ public stati ...
- android截全屏方法,Android实现全屏截图或长截屏功能
本文实例为大家分享了Android实现全屏截图或长截屏功能的具体代码,供大家参考,具体内容如下 全屏截图: /** * 传入的activity是要截屏的activity */ public stati ...
- FSCapture - 长截图工具
FSCapture - 长截图工具 前言 下载 使用 推荐设置 长截图 前言 目前大部分手机系统都自带长截图功能,但Windows系统没有自带的长截图功能,因此推荐一款第三方工具FSCapture,该 ...
- 无线智能插座Android Studio开发工具下载安装
该无线智能插座Android Studio开发工具的下载和安装,接下来将进行详细的介绍说明. (1)Android Studio开发工具下载 首先Android Studio开发工具的安装包下载链接为 ...
- iphone长截图哪个软件好_Windows长截图技巧、iPhone免费长截图软件
不管工作还是日常交流中,往往需要用到截图来进行更加详细的描述,甚至有时需用截取多张截图.截图这种常规操作,这里就不多说了.今天要分享的是如何截取长图. 电脑 - Chrome浏览器 Chrome浏览器 ...
- 【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )
文章目录 一.官方文档 二.Android 命令行工具简介 1.SDK 命令行工具 2.SDK 构建工具 3.SDK 平台工具 4.模拟器工具 5.Jetifier 工具 一.官方文档 Android ...
最新文章
- Delphi 2010 refactor / refactoring 重构不能使用的原因以及解决
- java 图片上传
- 14行代码AC——1017 A除以B (20分)(大数运算+讲解)
- android之实现各个组件点击事件处理
- 按规律插入一个数字到数组中
- centos 安装java sdk_Linux——CentOS7使用yum命令安装Java SDK
- mysql 5.6 my.cnf配置文件_mysql 5.6 my.cnf 配置
- jquery ajax 请求中多出现一次OPTIONS请求及其解决办法
- 华三 h3c PBR策略配置
- 疫情防控背景下在线课程教学满意度影响因素分析与对策探讨-以电子商务及法律专业为例
- 抓包工具charles青花瓷的基本使用(android)
- drf 配置文件 过滤类 全局异常 接口文档
- 怎么提高公文写作水平?原来这就是公文写作通知类模板
- 霹雳吧啦Wz语义分割学习笔记P7
- 计算机组成原理简答课后答案,计算机组成原理_习题集(含答案).doc
- 软件项目管理作业(一)
- 用python绘制熊猫图案,在python中绘制熊猫系列的CDF
- 网页前端监控系统(错误日志,接口监控)的使用
- 项目一:CRM(客户关系管理系统)--9---自定制action
- Azure Synapse Analytics(Azure SQL DW) 性能优化指南(2)——使用具体化视图优化性能(上)