全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

android中Webview实现截屏三种方式小结

本人最近学习了android中Webview实现截屏三种方式,下面我来记录一下,有需要了解的朋友可参考。希望此文章对各位有所帮助。

第一种方式

通过调用webview.capturePicture(),得到一个picture对象,根据图像的宽和高创建一个Bitmap,再创建一个canvas,绑定bitmap,最后用picture去绘制。

//获取Picture对象
Picture picture = wv_capture.capturePicture();
//得到图片的宽和高(没有reflect图片内容)
int width = picture.getWidth();
int height = picture.getHeight();
if (width > 0 && height > 0) {
  //创建位图
  Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  //绘制(会调用native方法,完成图形绘制)
  picture.draw(canvas);

}

这种方式可以获取webview中已加载的所有数据图像,也就是长截屏的效果。这种方式在Android 4.4以下是没有问题的,但是在5.0以上就行不通了。capturePicture()方法在4.4中废弃掉了,官方建议使用onDrow()方法来获取webview的bitmap快照。具体实现如下:

//获取webview缩放率
float scale = wv_capture.getScale();
//得到缩放后webview内容的高度
int webViewHeight = (int) (wv_capture.getContentHeight()*scale);
Bitmap bitmap = Bitmap.createBitmap(wv_capture.getWidth(),webViewHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
//绘制
wv_capture.draw(canvas);

但是此时在5.0+上会发现,截取的快照只显示了webview中显示出来的那部分,没有显示出来的部分是空白的。通过google找到了原因,在5.0+版本上,Android对webview做了优化,旨在减少内存占用以提高性能。因此在默认情况下会智能的绘制html中需要绘制的部分,其实就是当前屏幕展示的html内容,因此会出现未显示的图像是空白的。解决办法是调用enableSlowWholeDocumentDraw()方法。这个方法需要在webview创建之前调用,在Activity里就是在setContentView前去调用,此方法会有显著的性能开销。

这里需要注意的是在传递webview的高度时,是通过缩放率计算的,这样就会算出绘制整个已加载的html内容所需的高度。如果没有这个缩放率,那么得到的快照就仅仅是这个html内容最上面的那一段。还有一个问题就是在5.0+系统上得到快照比较模糊,在其他版本上没有问题,不知道原因何在?

第二种方式

利用view的缓存功能。Android为了提高滚动等各方面的绘制速度,可以为每一个view建立一个缓存,使用 View.buildDrawingCache为自己的view建立相应的缓存, 这个cache就是一个bitmap对象。利用这个功能可以对整个屏幕视图进行截屏并生成Bitmap,也可以 获得指定的view的Bitmap对象。

因此对于webview来说也可以使用这种方式,在使用getDrawingCache()方法获取bitmap对象前,先开启webview的缓存功能.

webView.setDrawingCacheEnabled(true);
...
Bitmap bitmap = webView.getDrawingCache();

需要注意的是,在上述情况下,这个缓存bitmap对象只有一个,因此每次获取的bitmap指向的是同一块地址空间的缓存对象,如果在使用完bitmap后就立即回收掉这个对象,那么再次获取当前view的缓存对象时就会得到null。所以要在Activity销毁时进行回收,所以开启缓存的话会有性能开销。

第三种方式

比较简单,通过获取当前window的DecorView,然后绘制Bitmap对象。

View view = context.getWindow().getDecorView();
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
保存到文件

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

  }

具体demo猛戳这里: WebviewCapture_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # webview截屏  # Webview实现截屏  # Android截屏方案实现原理解析  # Android截屏分享功能  # Android 下调试手机截屏的方法  # Android 实现截屏功能的实例  # android长截屏原理及实现代码  # Android实现截屏方式整理(总结)  # Android截屏SurfaceView黑屏问题的解决办法  # Android截屏截图的几种方法总结  # Android 获取浏览器当前分享页面的截屏示例  # Android实现矩形区域截屏的方法  # Android Activity 不能被截屏的解决方法  # 的是  # 会有  # 需要注意  # 自己的  # 情况下  # 加载  # 就会  # 是在  # 就是在  # 我来  # 要在  # 所需  # 就行  # 如果没有  # 还有一个  # 三种  # 仅仅是  # 掉了  # 只有一个  # 只显示 


相关文章: 建站之星后台密码如何安全设置与找回?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  大连网站设计制作招聘信息,大连投诉网站有哪些?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  建站之星后台管理:高效配置与模板优化提升用户体验  三星网站视频制作教程下载,三星w23网页如何全屏?  如何制作网站标识牌,动态网站如何制作(教程)?  ,石家庄四十八中学官网?  如何解决VPS建站LNMP环境配置常见问题?  如何用西部建站助手快速创建专业网站?  香港服务器部署网站为何提示未备案?  如何快速搭建高效WAP手机网站吸引移动用户?  中山网站推广排名,中山信息港登录入口?  如何彻底卸载建站之星软件?  网站按钮制作软件,如何实现网页中按钮的自动点击?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  c++ stringstream用法详解_c++字符串与数字转换利器  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  家庭建站与云服务器建站,如何选择更优?  北京网站制作网页,网站升级改版需要多久?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  测试制作网站有哪些,测试性取向的权威测试或者网站?  高端建站如何打造兼具美学与转化的品牌官网?  已有域名如何免费搭建网站?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何选择高效响应式自助建站源码系统?  浅谈Javascript中的Label语句  头像制作网站在线制作软件,dw网页背景图像怎么设置?  定制建站哪家更专业可靠?推荐榜单揭晓  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  公司网站制作价格怎么算,公司办个官网需要多少钱?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何快速登录WAP自助建站平台?  如何在建站主机中优化服务器配置?  高防服务器租用指南:配置选择与快速部署攻略  制作电商网页,电商供应链怎么做?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  Java解压缩zip - 解压缩多个文件或文件夹实例  常州自助建站费用包含哪些项目?  *服务器网站为何频现安全漏洞?  建站之星×万网:智能建站系统+自助建站平台一键生成  制作宣传网站的软件,小红书可以宣传网站吗?  如何在自有机房高效搭建专业网站?  建站之星好吗?新手能否轻松上手建站?  如何通过多用户协作模板快速搭建高效企业网站?  广东专业制作网站有哪些,广东省能源集团有限公司官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。