全网整合营销服务商

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

免费咨询热线: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 不能被截屏的解决方法  # 的是  # 会有  # 需要注意  # 自己的  # 情况下  # 加载  # 就会  # 是在  # 就是在  # 我来  # 要在  # 所需  # 就行  # 如果没有  # 还有一个  # 三种  # 仅仅是  # 掉了  # 只有一个  # 只显示 


相关文章: h5网站制作工具有哪些,h5页面制作工具有哪些?  制作网站的基本流程,设计网站的软件是什么?  网站app免费制作软件,能免费看各大网站视频的手机app?  如何确保FTP站点访问权限与数据传输安全?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  建站主机选购指南:核心配置与性价比推荐解析  网站制作大概多少钱一个,做一个平台网站大概多少钱?  北京专业网站制作设计师招聘,北京白云观官方网站?  如何选择适合PHP云建站的开源框架?  建站主机服务器选购指南:轻量应用与VPS配置解析  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何选择CMS系统实现快速建站与SEO优化?  建站之星×万网:智能建站系统+自助建站平台一键生成  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  北京企业网站设计制作公司,北京铁路集团官方网站?  C#怎么创建控制台应用 C# Console App项目创建方法  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  建站之星安装后如何配置SEO及设计样式?  简单实现Android验证码  高防服务器如何保障网站安全无虞?  如何通过西部建站助手安装IIS服务器?  如何通过多用户协作模板快速搭建高效企业网站?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何快速搭建高效香港服务器网站?  如何在万网自助建站中设置域名及备案?  山东网站制作公司有哪些,山东大源集团官网?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  如何在宝塔面板中创建新站点?  宝塔新建站点为何无法访问?如何排查?  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站主机与服务器功能差异如何区分?  如何在IIS中新建站点并配置端口与IP地址?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  长沙企业网站制作哪家好,长沙水业集团官方网站?  建站之星如何修改网站生成路径?  如何破解联通资金短缺导致的基站建设难题?  如何制作网站标识牌,动态网站如何制作(教程)?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  太平洋网站制作公司,网络用语太平洋是什么意思?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  建站之星好吗?新手能否轻松上手建站?  代购小票制作网站有哪些,购物小票的简要说明? 

您的项目需求

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