本文实例为大家分享了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实现长截屏功能相关推荐

  1. android 加花工具下载,Android 代码混淆并加花

    APK安全: 代码混淆且加壳防止反编译 1.用到的工具jd-gui-0.3.5.windows dex2jar-0.0.9.15 IDAProv6.8 C32Asm DexFixer Windowss ...

  2. java网页截图_Java实现的简单网页截屏功能示例

    本文实例讲述了Java实现的简单网页截屏功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.AWTException; import java.a ...

  3. html2canvas动态截图,html2canvas.js按界面元素截屏功能演示

    HTML 导入代码模板: Document .td-nav-tabs { padding-left: 0; margin-bottom: 0; list-style: none; height: 50 ...

  4. android实现长截屏,Android实现全屏截图或长截屏功能

    本文实例为大家分享了Android实现全屏截图或长截屏功能的具体代码,供大家参考,具体内容如下 全屏截图: /** * 传入的activity是要截屏的activity */ public stati ...

  5. android截全屏方法,Android实现全屏截图或长截屏功能

    本文实例为大家分享了Android实现全屏截图或长截屏功能的具体代码,供大家参考,具体内容如下 全屏截图: /** * 传入的activity是要截屏的activity */ public stati ...

  6. FSCapture - 长截图工具

    FSCapture - 长截图工具 前言 下载 使用 推荐设置 长截图 前言 目前大部分手机系统都自带长截图功能,但Windows系统没有自带的长截图功能,因此推荐一款第三方工具FSCapture,该 ...

  7. 无线智能插座Android Studio开发工具下载安装

    该无线智能插座Android Studio开发工具的下载和安装,接下来将进行详细的介绍说明. (1)Android Studio开发工具下载 首先Android Studio开发工具的安装包下载链接为 ...

  8. iphone长截图哪个软件好_Windows长截图技巧、iPhone免费长截图软件

    不管工作还是日常交流中,往往需要用到截图来进行更加详细的描述,甚至有时需用截取多张截图.截图这种常规操作,这里就不多说了.今天要分享的是如何截取长图. 电脑 - Chrome浏览器 Chrome浏览器 ...

  9. 【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )

    文章目录 一.官方文档 二.Android 命令行工具简介 1.SDK 命令行工具 2.SDK 构建工具 3.SDK 平台工具 4.模拟器工具 5.Jetifier 工具 一.官方文档 Android ...

最新文章

  1. Delphi 2010 refactor / refactoring 重构不能使用的原因以及解决
  2. java 图片上传
  3. 14行代码AC——1017 A除以B (20分)(大数运算+讲解)
  4. android之实现各个组件点击事件处理
  5. 按规律插入一个数字到数组中
  6. centos 安装java sdk_Linux——CentOS7使用yum命令安装Java SDK
  7. mysql 5.6 my.cnf配置文件_mysql 5.6 my.cnf 配置
  8. jquery ajax 请求中多出现一次OPTIONS请求及其解决办法
  9. 华三 h3c PBR策略配置
  10. 疫情防控背景下在线课程教学满意度影响因素分析与对策探讨-以电子商务及法律专业为例
  11. 抓包工具charles青花瓷的基本使用(android)
  12. drf 配置文件 过滤类 全局异常 接口文档
  13. 怎么提高公文写作水平?原来这就是公文写作通知类模板
  14. 霹雳吧啦Wz语义分割学习笔记P7
  15. 计算机组成原理简答课后答案,计算机组成原理_习题集(含答案).doc
  16. 软件项目管理作业(一)
  17. 用python绘制熊猫图案,在python中绘制熊猫系列的CDF
  18. 网页前端监控系统(错误日志,接口监控)的使用
  19. 项目一:CRM(客户关系管理系统)--9---自定制action
  20. Azure Synapse Analytics(Azure SQL DW) 性能优化指南(2)——使用具体化视图优化性能(上)

热门文章

  1. php垂直搜安装,七大垂直搜索引擎
  2. 联想笔记本wifi打不开怎么办
  3. css鼠标样式cursor介绍(鼠标手型)
  4. Ubuntu系统Root用户无法登录
  5. 安装、卸载nginx(基于Centos7)
  6. 跑步耳机哪个牌子好、最适合跑步佩戴得蓝牙耳机推荐
  7. “熊猫视图”.Net图形控件功能介绍 [十六]:图元旋转
  8. 基线转弯保护区算法分析
  9. 首创ToB非成勿扰,2018生态大会让软件商与渠道商惊艳对接
  10. openGauss数据库闪回功能验证