Android WebView实现长截图
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实现长截图相关推荐
- android webview 截图,android WebView 截取长图 《转载》
先看看手机自带的长截屏功能: 机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的View 2:截取View在屏幕渲染的内容 3:不断滚动View,截取View渲染的内容,存储 ...
- android WebView截长图实现
1.先简单介绍下webview截屏,看代码: //开启缓存 webview.setDrawingCacheEnabled(true); webview.buildDrawingCache();Bitm ...
- android中最新webview的功能,Android WebView实现截长图功能
本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能: 机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...
- android webview 图片居中,Android WebView实现截长图功能
本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能: 机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...
- 8屏幕滚动_对标iOS?Android 11或无缘屏幕长截图
一直以来,不少用户都很喜欢用长截图功能进行页面截图,可以说在日常应用中这是一项比较实用的功能.目前比较主流的小米MIUI.华为EMUI.三星OneUI等第三方 Android 定制 UI都对这一功能进 ...
- Android长截图与长图分享
1.第一步如何实现长截图 Android长截屏– ScrollView,ListView及RecyclerView截屏 这个链接地址写的很清楚了,建议进行实际操作. 概述:其实长截图就是将布局存成图像 ...
- Android长截图(五) - 遇到的坑
概述: 上个月产品提出的需求,第一反应是各种百度,查资料,窥视其它应用是使用什么方法实现该功能.于是就看到简书有实现长图分享的功能. 在实现功能时,有查看一些资料.反手就是一链接 blog.csdn. ...
- Android webView长按保存图片到本地相册(队列下载实现)
前言 自己写的app中 有大量的webView 在加载的过程中 新增了许多功能 比如 加载H5链接时 遇到有趣的图片 想长按保存下来是否可以呢 答案:"肯定是可以的" 网上有很多例 ...
- Android 后台进行长图的生成并分享(非长截图)
DrawLongPictureDemo 项目地址:SherlockGougou/DrawLongPictureDemo 简介:Android 后台进行长图的生成并分享(非长截图) 更多:作者 提 ...
- android 屏幕长截图,对标iOS?Android 11或无缘屏幕长截图
原标题:对标iOS?Android 11或无缘屏幕长截图 一直以来,不少用户都很喜欢用长截图功能进行页面截图,可以说在日常应用中这是一项比较实用的功能. 目前比较主流的小米MIUI.华为EMUI.三星 ...
最新文章
- android 用命令行打包生成 apk
- Oracle的DECODE函数
- Python基础入门:endswith() 函数
- javascript --- 隐藏内部实现(最小暴露原则)
- php算法求出兔子数列,PHP算法:斐波那契数列的N种算法
- Object C学习笔记13-Dictionary字典
- docker搭建ldap
- @程序员,早知道假期这样你会干什么?
- python2.7下安装PyQt4
- 360与QQ大战观感
- 啸叫抑制(howling suppression)
- BLE MESH组网(一)简介和基本概念
- 汽车VIN码与二手车市场
- 渣渣渣变渣渣系列(8)
- Ubuntu系统下硬盘安装windows
- ROS2021开发者大会将于新奥尔良重启
- kaliddos教学
- 手把手教你一项Python爬虫接单(技术+渠道)
- CMMI3和CMMI5的区别
- springboot自动创建Oracle,一键生成项目 SpringBoot项目代码生成器 支持Oracle 支持MySql...
热门文章
- 金蝶与旺店通集成解决方案(金蝶为主)
- 开计算机课的积极消极影响,多媒体课件的负面影响及建议
- 【应急响应】————7、服务器大量发包
- pe系统怎么安装linux系统教程,U盘安装windows+ubuntu+winpe三系统详细教程
- 32位java jre_64位的jre和32位的jre
- SolidWorks学习(1):基础绘图
- 计算机学报在线阅读,计算机学报CHIN
- TaggedInputSplit cannot be cast to org.apache.hadoop.mapreduce.lib.input.FileSplit
- win10如何强制删除文件
- 群联固态硬盘修复工具_固态硬盘有三大要素,那么你的固态硬盘买对了吗?