Android网页长截图功能实现

在安卓开发过程中,有时候会需要进行长截图,而传统截图都是单张截图,若我们想获取整个网页的内容做长截图该怎么做呢?

1.首先我们可以先处理一下链接

// 打开网页
String content = mContentEdit.getText().toString();
if (TextUtils.isEmpty(content)) {ToastUtils.showShortToast("请输入或粘贴网址");return;
}
if (!content.contains("http://") && !content.contains("https://")) {content ="http://" + content;
}
if (content.contains(" ")) {// 淘宝链接转正确网址String host ="http://";if (content.contains("https://")) {host ="https://";}String s = content.substring(content.indexOf(host));if (s.contains(" ")) {s = s.substring(0, s.indexOf(" "));content = s;}
}
// 校验网址是否有效
if (!Patterns.WEB_URL.matcher(content).matches()) {ToastUtils.showShortToast("请输入或粘贴有效网址");return;
}
Intent intent =new Intent(this, WebScreenShotActivity.class);
intent.putExtra("url", content);
startActivity(intent);

2.WebView页面展示网页

 WebSettings webSettings = mWebView.getSettings();webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);webSettings.setDefaultTextEncodingName("UTF-8");webSettings.setJavaScriptEnabled(true);webSettings.setUserAgentString(webSettings.getUserAgentString());webSettings.setJavaScriptCanOpenWindowsAutomatically(true);webSettings.setSupportZoom(true);webSettings.setUseWideViewPort(true);webSettings.setBuiltInZoomControls(true);webSettings.setLoadWithOverviewMode(true);webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);webSettings.setLoadsImagesAutomatically(true);webSettings.setDomStorageEnabled(true);webSettings.setDatabaseEnabled(true);webSettings.setAppCacheEnabled(true);mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {return false;}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);if(!mWebView.getSettings().getLoadsImagesAutomatically()) {mWebView.getSettings().setLoadsImagesAutomatically(true);}}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);});
mWebView.loadUrl(getIntent().getStringExtra("url"));

3.实现长截图功能

注意:该方法在Android4.4以下可以截取整个WebView的内容,但是在4.4以上,需要在WebView未加载之前,也就是setContentView之前,增加以下代码,才能截取整个WebView的内容。

if (Build.VERSION.SDK_INT > 19) {mWebView.enableSlowWholeDocumentDraw();
}

下面就是长截图功能实现部分:

Picture snapShot = mWebView.capturePicture();
if (snapShot == null || snapShot.getHeight() <= 0 || snapShot.getWidth() <= 0) return;
Bitmap bitmap = Bitmap.createBitmap(snapShot.getWidth(), snapShot.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
snapShot.draw(canvas);

4.保存到本地相册,并刷新

try {String fileName = Environment.getExternalStorageDirectory().getPath()+"/temp_capture.jpg";FileOutputStream fos = new FileOutputStream(fileName);//压缩bitmap到输出流中bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos);fos.close();Toast.makeText(WebviewFromGetDecorView.this, "截屏成功", Toast.LENGTH_LONG).show();File file = new File(fileName);insertToSystem(mActivity, file, fileName);
} catch (Exception e) {Log.e(TAG, e.getMessage());
} finally {if(bitmap != null) {bitmap.recycle();}
}

刷新媒体库方法

public void insertToSystem(Context context, File file, String fileName) {try {MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(), fileName, null);} catch (FileNotFoundException e) {e.printStackTrace();}// 通知图库更新if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 判断SDK版本是不是4.4或者高于4.4String[] paths = new String[]{file.getAbsolutePath()};MediaScannerConnection.scanFile(context, paths, null, null);} else {final Intent intent;if (file.isDirectory()) {intent = new Intent(Intent.ACTION_MEDIA_MOUNTED);intent.setClassName("com.android.providers.media","com.android.providers.media.MediaScannerReceiver");intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));} else {intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);intent.setData(Uri.fromFile(file));}context.sendBroadcast(intent);}
}

Android WebView实现长截图相关推荐

  1. android webview 截图,android WebView 截取长图 《转载》

    先看看手机自带的长截屏功能: 机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的View 2:截取View在屏幕渲染的内容 3:不断滚动View,截取View渲染的内容,存储 ...

  2. android WebView截长图实现

    1.先简单介绍下webview截屏,看代码: //开启缓存 webview.setDrawingCacheEnabled(true); webview.buildDrawingCache();Bitm ...

  3. android中最新webview的功能,Android WebView实现截长图功能

    本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能:  机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...

  4. android webview 图片居中,Android WebView实现截长图功能

    本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能:  机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...

  5. 8屏幕滚动_对标iOS?Android 11或无缘屏幕长截图

    一直以来,不少用户都很喜欢用长截图功能进行页面截图,可以说在日常应用中这是一项比较实用的功能.目前比较主流的小米MIUI.华为EMUI.三星OneUI等第三方 Android 定制 UI都对这一功能进 ...

  6. Android长截图与长图分享

    1.第一步如何实现长截图 Android长截屏– ScrollView,ListView及RecyclerView截屏 这个链接地址写的很清楚了,建议进行实际操作. 概述:其实长截图就是将布局存成图像 ...

  7. Android长截图(五) - 遇到的坑

    概述: 上个月产品提出的需求,第一反应是各种百度,查资料,窥视其它应用是使用什么方法实现该功能.于是就看到简书有实现长图分享的功能. 在实现功能时,有查看一些资料.反手就是一链接 blog.csdn. ...

  8. Android webView长按保存图片到本地相册(队列下载实现)

    前言 自己写的app中 有大量的webView 在加载的过程中 新增了许多功能 比如 加载H5链接时 遇到有趣的图片 想长按保存下来是否可以呢 答案:"肯定是可以的" 网上有很多例 ...

  9. Android 后台进行长图的生成并分享(非长截图)

    DrawLongPictureDemo 项目地址:SherlockGougou/DrawLongPictureDemo  简介:Android 后台进行长图的生成并分享(非长截图) 更多:作者   提 ...

  10. android 屏幕长截图,对标iOS?Android 11或无缘屏幕长截图

    原标题:对标iOS?Android 11或无缘屏幕长截图 一直以来,不少用户都很喜欢用长截图功能进行页面截图,可以说在日常应用中这是一项比较实用的功能. 目前比较主流的小米MIUI.华为EMUI.三星 ...

最新文章

  1. android 用命令行打包生成 apk
  2. Oracle的DECODE函数
  3. Python基础入门:endswith() 函数
  4. javascript --- 隐藏内部实现(最小暴露原则)
  5. php算法求出兔子数列,PHP算法:斐波那契数列的N种算法
  6. Object C学习笔记13-Dictionary字典
  7. docker搭建ldap
  8. @程序员,早知道假期这样你会干什么?
  9. python2.7下安装PyQt4
  10. 360与QQ大战观感
  11. 啸叫抑制(howling suppression)
  12. BLE MESH组网(一)简介和基本概念
  13. 汽车VIN码与二手车市场
  14. 渣渣渣变渣渣系列(8)
  15. Ubuntu系统下硬盘安装windows
  16. ROS2021开发者大会将于新奥尔良重启
  17. kaliddos教学
  18. 手把手教你一项Python爬虫接单(技术+渠道)
  19. CMMI3和CMMI5的区别
  20. springboot自动创建Oracle,一键生成项目 SpringBoot项目代码生成器 支持Oracle 支持MySql...

热门文章

  1. 金蝶与旺店通集成解决方案(金蝶为主)
  2. 开计算机课的积极消极影响,多媒体课件的负面影响及建议
  3. 【应急响应】————7、服务器大量发包
  4. pe系统怎么安装linux系统教程,U盘安装windows+ubuntu+winpe三系统详细教程
  5. 32位java jre_64位的jre和32位的jre
  6. SolidWorks学习(1):基础绘图
  7. 计算机学报在线阅读,计算机学报CHIN
  8. TaggedInputSplit cannot be cast to org.apache.hadoop.mapreduce.lib.input.FileSplit
  9. win10如何强制删除文件
  10. 群联固态硬盘修复工具_固态硬盘有三大要素,那么你的固态硬盘买对了吗?