本文实例为大家分享了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. 倒计时 4 天!高通人工智能应用创新大赛颁奖典礼线上隆重举行
  2. Handler消息机制(十):HandlerThread源码解析
  3. Dynamic LAN-to-LAN ××× 之 Router-to-Router
  4. Android PC投屏简单尝试(录屏直播)2—硬解章(MediaCodec+RMTP)
  5. 基于ubuntu18.04LTS SERVER版的基础系统安装过程
  6. 推荐系统之美团在CTR模型优化的实践
  7. Linux删除带空格的文件 删除最后一个后缀名
  8. gulp启动项目报错
  9. limitBy过滤器是配合数组使用的,限制数组元素的个数,话不多说,来个小例子。...
  10. 无线通信信号的功率表示方法中dBm,dB与w的换算关系
  11. hadoop fs,hadoop dfs以及hdfs dfs区别
  12. Vue Tags Input
  13. LZJ的Python第二次打卡
  14. VMware虚拟机ubuntu指定使用主机的wifi无线网卡
  15. 数据中心机房设备标签规范建议
  16. Android获取电子签名内容,Android Studio 获取app签名
  17. 公钥(RSA)加密应用场景
  18. 外媒称今年iPhone XR将新增两种颜色:绿色和薰衣草色
  19. 飞机游戏中子弹与飞机的移动与边界源码
  20. 关于小程序如何长按复制长文本的方法(比较简单的一种)

热门文章

  1. jqm文件上传,上传图片,jqm的表单操作,jqm的ajax的使用,jqm文件操作大全,文件操作demo
  2. 用python画篮球场_走上python自学的辛酸路
  3. css 修改三角形大小_css实现三角形
  4. 弘辽科技:淘宝店铺怎么补流量单?淘宝如何快速获取流量?
  5. 用于 TortoiseHg 的 bugfix 版 KDiff3.exe
  6. Discuz!x3.4 QQ互联跳过完善资料直接登录(详细教程方法)
  7. UE4 C++代码实现电池人游戏
  8. sqlyog注释的快捷键-先收藏
  9. SpringBoot+Vue项目知识管理系统
  10. selenium操作表单元素