安卓使用webview一键截长图宽图
安卓使用webView一键截长图宽图
项目中webView要截图,但是不同手机又不能满足截图需要,
增加一个 “截图” 功能! 可以截取 超出屏幕的长图和宽图
效果图
- honor 6x的横屏的下不支持截长图 (原表格内容是可上下左右滑动的)
- 点击上图"一键截图" 截到的图
- 截图后分享到微信(以上贴图是压缩后的效果,原图是比较清晰的)
WebActivity
...
var webSettings = webView!!.settingswebSettings.userAgentString = WebUI.UAwebSettings.layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMNwebSettings.javaScriptEnabled = truewebSettings.domStorageEnabled = truewebSettings.builtInZoomControls = truewebSettings.setSupportZoom(true)webSettings.loadWithOverviewMode = truewebSettings.displayZoomControls = false;webView.setOnLongClickListener { true }
webView!!.webChromeClient = object : WebChromeClient() {override fun onProgressChanged(view: WebView, newProgress: Int) {...}override fun onJsAlert(view: WebView?, url: String?, message: String?, result: JsResult?): Boolean {result?.confirm()return true}override fun onJsPrompt(webView: WebView, url1: String, message: String, defaultValue: String, result: JsPromptResult): Boolean {"capture" -> {//从接收到webview的宽高参数var width = obj.getString("width").toFloat()var height = obj.getString("height").toFloat()captureWholePage(SysUtil.px2dp(this@WebUI, width),SysUtil.px2dp(this@WebUI, height))}}}/*** 截图*/
private fun captureWholePage(width: Int, height: Int) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {try {var bitmap = captureWebViewLollipop(webView, width, height)//4.4的截图方法测试过,高版本也可以使用但是已经被标为废弃不推荐了//var bitmap = captureWebViewKitKat(webView)if (bitmap != null) {shareCapture(bitmap)} else {SmartToast.showInCenter("生成图片出错")}} catch (oom: OutOfMemoryError) {SmartToast.showInCenter("OutOfMemoryError")}} else {SmartToast.showInCenter("当前手机版本过低,不支持截图功能")}}/*** 5.0以上截长图*/
private fun captureWebViewLollipop(webView: WebView, height: Int): Bitmap {webView.measure(View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));webView.layout(0, 0, webView.measuredWidth, height)webView.isDrawingCacheEnabled = true;webView.buildDrawingCache()var longImage = Bitmap.createBitmap(webView.measuredWidth, webView.measuredHeight, Bitmap.Config.ARGB_8888)var canvas = Canvas(longImage)webView.draw(canvas)return longImage
}/*** 截图 4.4*/
private fun captureWebViewKitKat(webView: WebView): Bitmap? {//获取Picture对象var picture = webView.capturePicture()//得到图片的宽和高(没有reflect图片内容)var width = picture.widthvar height = picture.heightif (width > 0 && height > 0) {//创建位图var bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);var canvas = Canvas(bitmap)//绘制(会调用native方法,完成图形绘制)picture.draw(canvas)return bitmap}return null}/*** 分享到微信,使用第三方shareSDk*/
private fun shareCapture(bitmap: Bitmap) {var uri = Uri.parse(MediaStore.Images.Media.insertImage(contentResolver, bitmap, null, null));val imgPath= getRealFilePath(this,uri)
// 系统的分享到微信会压缩导致查看图片不能显示"查看原图"
// var intent = Intent(Intent.ACTION_SEND)
// intent.type = "image/jpeg"
// intent.putExtra(Intent.EXTRA_STREAM, uri)
// startActivity(Intent.createChooser(intent, "分享"));var oks = OnekeyShare();oks.disableSSOWhenAuthorize();oks.setImagePath(imgPath)oks.show(this)}/*** 根据Uri获取真实图片路径*** 一个android文件的Uri地址一般如下:* content://media/external/images/media/62026** @param context* @param uri* @return*/
fun getRealFilePath(context: Context, uri: Uri?): String? {if (null == uri) return nullval scheme = uri!!.schemevar data: String? = nullif (scheme == null)data = uri!!.pathelse if (ContentResolver.SCHEME_FILE == scheme) {data = uri!!.path} else if (ContentResolver.SCHEME_CONTENT == scheme) {val cursor = context.contentResolver.query(uri, arrayOf(MediaStore.Images.ImageColumns.DATA), null, null, null)if (null != cursor) {if (cursor!!.moveToFirst()) {val index = cursor!!.getColumnIndex(MediaStore.Images.ImageColumns.DATA)if (index > -1) {data = cursor!!.getString(index)}}cursor!!.close()}}return data
}
Web页面
默认加载的 meta
<meta name="viewport" content="width=device-width, initial-scale=1">
增加一个方法改造成获取 initial-scale
<script>;(function () {//这里页面内容的宽度为960pxvar scale = (screen.width / 960).toFixed(2);document.write('<meta name="viewport" content="width=device-width, initial-scale=' + scale + ', maximum-scale=1, user-scalable=no>')
})();
</script>
- 根据自己页面内容的宽度调整被除数, 截图出来的宽度就是占满的
安卓使用webview一键截长图宽图相关推荐
- android中最新webview的功能,Android WebView实现截长图功能
本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能: 机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...
- android webview 图片居中,Android WebView实现截长图功能
本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能: 机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...
- Android 实现截屏和截长图功能的几种方法
欢迎大家关注我的公众号:**牛角尖尖上起舞** 一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区 ...
- WebView截长图解决方案
作者:Windin 贝聊移动Android工程师 链接: http://www.jianshu.com/p/0faa70e88441 前言:本文主要讲述了以下两个方面: 1. 普通WebView如何截 ...
- microsoft edge怎么截长图_苹果安卓手机怎么截长图?超简单的方法拿走不谢
操作方便才是硬道理 ▣编辑:瓜酱 来源:网络 一.小米手机 1. 第一步,打开手机,向下滑动打开通知栏,找到截图工具图标. 2. 第二步,如果在前四个图标内没有截屏图标的话,就点击展开所有的功能,可通 ...
- android WebView截长图实现
1.先简单介绍下webview截屏,看代码: //开启缓存 webview.setDrawingCacheEnabled(true); webview.buildDrawingCache();Bitm ...
- Android实现截屏和截长图功能的几种方法
一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区域(包含状态栏)全部截取下来. 如果开发中想要调 ...
- Android滚动截屏,ScrollView截屏,Listview截屏,Recyclerview截屏, 截长图
最近在做一个关于截频的功能, 恰逢鸿洋大神分享了一篇相关的博客, 我使用之后觉得甚是好用, 所以也整理了一下,以供学习. 在做分享功能的时候,需要截取全屏内容还有截长图,一屏展示不完的内容,一般我们会 ...
- microsoft edge怎么截长图_苹果手机怎么截长图?(2020年最新版)
苹果手机怎么截长图?苹果手机没有自带截长图功能?想要截长图不知道怎么操作?我相信大部分人是不知道用苹果手机怎么截长图的,作为一个搞机多年的小编,今天就教一下大家苹果手机怎么截长图. 很多人都羡慕安卓手 ...
最新文章
- Monkey原理初步和改良优化--Android自动化测试学习历程
- 转 Python爬虫入门二之爬虫基础了解
- linux文件管理系统开发毕业,定稿毕业论文基于Linux的远程管理系统服务器端的实现word文档(范文1)...
- linux下python版本升级,linux下升级python版本
- [bbk4343]小布-OCP 042全真试题讲解
- Python ID 生成(UUID、自增、19位雪花算法ID)
- 【白皮书分享】2021年智慧城市白皮书:依托智慧服务,共创新型智慧城市.pdf(附下载链接)
- linux初识到入门_系统
- 安卓手机上最好用的3个azw3阅读器
- 哈希表、哈希桶数据结构以及刨析HashMap源码中哈希桶的使用
- 软件需求跟踪矩阵例子
- OpenCV——常用函数
- 详解几个基本概念“标准差标准误差,方差均方差”
- CORS Missing Allow Origin
- 互联网应用的两种工作模式:客户/服务器模式与P2P模式
- 负载均衡设备oracle,高可用的Oracle数据库负载均衡技术--深信服AD系列应用交付平台...
- GO分析和KEGG分析都是啥?
- 计算机 无法进入睡眠模式,win10电脑无法进入睡眠模式怎么解决
- ABAP Docking Control Container开发实例
- python应用-scipy,numpy,sympy计算微积分
热门文章
- 微波炉怎么用(微波炉是如何加热食物的?)
- 计算机毕业设计Java计算机类在线学习管理系统(源码+系统+mysql数据库+lw文档)
- 2018狗年宝宝取名技巧总结,快来看看吧!
- 【安卓】Android Studio 无法识别手机解决办法
- 原生JS实现vue中data值的修改与渲染
- 漫画 | 干掉session,爽死了!
- Unity之OpenXR+XR Interaction Toolkit实现 传送
- CP2102 USB to UART Bridge Driver的安装 RF读写器连接电脑不成功
- NBA表格_爬取NBA球员薪资数据【Python数据分析百例连载】
- html我的世界代码大全,我的世界作弊码大全 MC当中所有的指令总汇