之前用原生写的,效果一般能接受,但因为访问服务器返回的数据太慢了就修改成了网页加载。网页加载就要涉及到截屏了,有很多方法,大多都不太使用,都是截取可见视频的内容,并没有截取完,尝试了很多方法都是,最后得多一个结论,但具体是不是这样就不得而知了,可能跟缓存有关系,如果长图超过三页,后面的画面不会显示出来,只有滑动到后面的位置或者底部才会全部显示出来,但高度是正确的。

1.手动滑动到底部再分享

2.分享的时候自动滑动到底部再分享出去

核心部分:

 fun getWebViewBitmap(context: Context?, webview: WebView?): Bitmap? {return webview?.run {scrollTo(0, 0)buildDrawingCache(true)isDrawingCacheEnabled = trueisVerticalScrollBarEnabled = falsevar b = getViewBitmapWithoutBottom(this)var vh = height.toFloat()val th = contentHeight * scalevar temp: Bitmap? = nullif (th > vh) {val absVh = vh - paddingTop - paddingBottomdo {val reH = th - vhif (reH <= absVh) {scrollBy(0, reH.roundToInt())vh += reHtemp = getViewBitmap2(this)} else {scrollBy(0, absVh.roundToInt())vh += absVhtemp = getViewBitmapWithoutBottom(this)}b = mergeBitmap(vh, DisplayUtils.displayWidthPix(context), temp, 0, scrollY, b, 0, 0)} while (vh < th)}scrollTo(0, 0)isDrawingCacheEnabled = falseisVerticalScrollBarEnabled = truedestroyDrawingCache()b}}

这都是借鉴别人的,后面会贴出 ,就是根据得到的webview内容的高度再减去当前屏幕的高度再比较不断的去创建bitmap,这个方法就是要滑动到底部分享出去是成功的,如果没有滑动到底部,3页之后都是空白的

 private fun getViewBitmap2(v: View?): Bitmap? {return v?.run {setDrawingCacheEnabled(true)buildDrawingCache()if (Build.VERSION.SDK_INT >= 11) {measure(View.MeasureSpec.makeMeasureSpec(getWidth(), View.MeasureSpec.EXACTLY),View.MeasureSpec.makeMeasureSpec(getHeight(), View.MeasureSpec.EXACTLY))layout(getX().roundToInt(),getY().roundToInt(),(getX() + getMeasuredWidth()).roundToInt(),(getY() + getMeasuredHeight()).roundToInt())} else {measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED))layout(0, 0, getMeasuredWidth(), getMeasuredHeight());}val b = Bitmap.createBitmap(getDrawingCache(), 0, 0, getMeasuredWidth(), getMeasuredHeight())setDrawingCacheEnabled(false)destroyDrawingCache()b}}
 private fun getViewBitmapWithoutBottom(webview: WebView?): Bitmap? {return webview?.run {isDrawingCacheEnabled = truebuildDrawingCache()if (Build.VERSION.SDK_INT >= 11) {measure(View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY),View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY))layout(x.roundToInt(), y.roundToInt(), (x + measuredWidth).roundToInt(), (y + measuredHeight).roundToInt())} else {measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED))layout(0, 0, measuredWidth, measuredHeight)}val bt = Bitmap.createBitmap(drawingCache, 0, 0, measuredWidth, measuredHeight - paddingBottom)isDrawingCacheEnabled = falsedestroyDrawingCache()bt}}

之后就是拼接了

 private fun mergeBitmap(newImageH: Float, newImageW: Int, background: Bitmap?, backX: Int, backY: Int, foreground: Bitmap?, foreX: Int, foreY: Int): Bitmap? {if (null == background || null == foreground) return nullval bt = Bitmap.createBitmap(newImageW, newImageH.roundToInt(), Bitmap.Config.RGB_565)val ca = Canvas(bt)ca.drawBitmap(background, backX.toFloat(), backY.toFloat(), null)ca.drawBitmap(foreground, foreX.toFloat(), foreY.toFloat(), null)ca.save()ca.restore()return bt}

这段我也不是很明白,这样写怎么就是拼接,等以后再研究吧

Android之WebView网页滚动截图

Android 截长图一种实现方式

之后觉得如果要滑动到底部再分享出去这有点奇怪,最后还是再搜索了一下找到了一个可行方法。

fun getWebviewScale (webview: WebView?) : Bitmap? {var bitmap : Bitmap? =nullwebview?.let {val scale = it.scaleval height = it.contentHeight * scaleval width = it.widthbitmap = Bitmap.createBitmap(width, height.roundToInt(),Bitmap.Config.ARGB_8888)if (bitmap != null) {val canvas = Canvas(bitmap!!)it.draw(canvas)}}return bitmap}

先获取内容高度,这里的前提是可以获取到内容的高度再乘以webview分辨率得到最终高度,根据画布画出bitmap 最后测试结果可行,到此end

Android webview网页截取长图相关推荐

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

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

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

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

  3. jquery实现截取pc图片_如何优雅的对网页截取长图

    苏生不惑第115 篇原创文章,将本公众号设为星标,第一时间看最新文章. 最近写文章想截个长图,才发现一直使用的QQ早有这个功能了,这里就整理几个pc上网页长截图的方案. qq滚动截图 qq截图应该很多 ...

  4. 安卓使用webview一键截长图宽图

    安卓使用webView一键截长图宽图 项目中webView要截图,但是不同手机又不能满足截图需要, 增加一个 "截图" 功能! 可以截取 超出屏幕的长图和宽图 效果图 honor ...

  5. 电脑如何截长图?如何用电脑截取长图——规划全景

    一个规划的,想知道如何用电脑截取长图--规划全景 1.F12    2.Ctrl+Shift+P 3.full

  6. Snagit for Mac 如何截取长图,滚动截图?

    困扰我很久了,为了在mac上截取长图,今天终于成功了. 如下图: 第一步:选择image. 第二步:Selection选择Panoramic,就是选择滚动截图的意思. 第三步:到达你想要滚动截图,也就 ...

  7. Android 加载超大长图及原理

    Android 加载超大长图及原理 我们在开发中偶尔会遇到加载超大长图,类似于微信n多页聊天记录截图加载.但这类图片一般都会很大,几兆.十几兆.甚至几十兆,很容易造成内存溢出,今天笔者给大家提供一个可 ...

  8. Win10电脑如何截取网页连续长图?

    有时我们在工作演示时会需要截取网页上的图片,不过简单的截图可以,但如果需要截取超过屏幕大小的整个网页,你是不是就有些束手无策了.虽然拼接图片也是种方法,但毕竟还是不方便,下面 好系统重装助手 就教你在 ...

  9. 一个操作轻松截取长图,Win10上网截长图小技巧!

    截屏的方法有很多,但是有时候我们会遇到比电脑屏幕还大的图,比如网站上的长图.N条引用的评论...你要怎么截取呢?是不是最多只能截全屏?还是要做到第三方的截图软件呢? 下面介绍一种win10电脑自带的滚 ...

  10. Chrome 调试 Android WebView 网页

    手机开启开发者模式,并且Usb 连接到电脑 Android webView 开启调试模式 mWebView.setWebContentsDebuggingEnabled(true); Chrome 浏 ...

最新文章

  1. copper实现图片的裁剪和上传(1)
  2. Windows下电脑硬盘的日常维护细则
  3. 160个Crackme021
  4. ConcurrentHashMap 1.8 源码分析
  5. ICCV 2019 | 华科提出对称限制的校正网络,显著改进场景文本识别
  6. Php中如何记录本报时间,php写日报功能追加
  7. 【CSDN浏览器助手9月新版本】免费插件让你享受VIP待遇!
  8. 超详细Anaconda安装教程
  9. Dagger2简单使用
  10. matlab帧差法图像识别
  11. 根据日期算星座 mysql_php根据日期获取星座
  12. Linux下用imageMagick对图片进行一些操作,非常建议方便的一个图片处理工具。
  13. 7-2 学生成绩排序 (15 分)
  14. 怎么自己建网站?自己建网站要注意以下4点
  15. 2022年中职网络空间安全国赛竞赛题解析仅代表自己的建议——2022年中职网络安全国赛竞赛试题2解析
  16. 【涨粉10万】CSDN年度总结——再见2021
  17. 10款最佳跨浏览器测试工具,建议收藏
  18. 再看罗永浩对质王自如
  19. android TV 焦点选中放大效果
  20. 解决flash播放器与您的地区不相容,中国特供版锁区+弹窗广告的流氓行为

热门文章

  1. 链表的实现(C语言)
  2. 524MB的微信输入法:没广告 你会用吗
  3. echarts:中国地图-省市区二级联动
  4. VC打印机使用 win95环境的下例子测试
  5. Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
  6. Oracle锁表查看及处理
  7. CentOS7(Linux)详细安装教程
  8. oracle 分区交换
  9. Java项目的一些文件及其功能、使用方式。
  10. 1t98cp.com main.php,SCTF2019 Writeup——De1ta