作家
登录

Android截屏与WebView长图分享经验总结

作者: 来源: 2017-05-27 08:32:04 阅读 我要评论

二、WebView 生成长图

介绍 web 长图之前,先来说一下单屏图片的生成筹划,和手机截图不合的是生成的图片不会显示顶部的状况栏、标题栏以及底部的菜单栏,可以知足不合的营业需求。

  1. // WebView 生成当前屏幕大年夜小的图片,shortImage 就是最毕生成的图片 
  2. Bitmap shortImage = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.RGB_565); 
  3. Canvas canvas = new Canvas(shortImage);   // 画布的宽高和屏幕的宽高保持一致 
  4. Paint paint = new Paint(); 
  5. canvas.drawBitmap(shortImage, screenWidth, screenHeight, paint); 
  6. mWebView.draw(canvas); 

有的时刻我们须要将一个长 Web 网页生成图片分享出去,类似的例子就是手机端的各类便签应用,当便签内容超出一屏时,就须要将所有的内容生成一张长图对外分享出去。

WebView 和其他 View 一样,体系都供给了 draw 办法,可以直接将 View 的内容衬着到画布上,有了画布我们就可以在膳绫擎绘制其他各类各类的内容,比如底部添加 Logo 图片,画红线框等等。关于 WebView 生成长图网上已经有很多现成的筹划和代码,以下代码是经测试过的稳定版本,供参考。

  1. // WebView 生成长图,也就是跨越一屏的图片,代码中的 longImage 就是最后生成的长图 
  2. mWebView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED), 
  3.                  MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
  4. mWebView.layout(0, 0, mWebView.getMeasuredWidth(), mWebView.getMeasuredHeight()); 
  5. mWebView.setDrawingCacheEnabled(true); 
  6. mWebView.buildDrawingCache(); 
  7. Bitmap longImage = Bitmap.createBitmap(mWebView.getMeasuredWidth(), 
  8.         mWebView.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
  9. Canvas canvas = new Canvas(longImage);  // 画布的宽高和 WebView 的网页保持一致 
  10. Paint paint = new Paint(); 
  11. canvas.drawBitmap(longImage, 0, mWebView.getMeasuredHeight(), paint); 
  12. mWebView.draw(canvas); 

Android 为了进步滚动等各方面的绘制速度,可认为每一个 View 建立一个缓存,应用 View#buildDrawingCache 为本身的 View 建立响应的缓存, 这个 cache 就是一个 bitmap 对象。应用这个功能可以半数个屏幕视图进行截屏并生成 Bitmap ,也可以获得指定的 View 的 Bitmap 对象。这里因为还要在原有的图片上绘制 Logo ,所以直接应用了 WebView 的 draw 办法了。

因为我们的 H5 页面大年夜部分都是运行在微信的 X5 浏览器中,所认为了削减前端的适配工作,我们将腾讯的 X5 浏览器内核惹人了 Android 工程中,代替体系原生的 WebView 内核,关于 X5 内核的惹人后续还会有专门的文┞仿介绍,敬请等待。

这里须要解释一下如安在 X5 内核下生成 Web 长图,膳绫擎代码展示的体系原生 WebView 生成图片的筹划,然则在 X5 情况下上述代码就掉效了,经由踩坑以及查看 X5 内核源代码,最终我们找到懂得决该问题的办法,下面用关键代率攀来解释一下具体的实现方法。

  1. // 这里的 mWebView 就是 X5 内核的 WebView ,代码中的 longImage 就是最后生成的长图 
  2. mWebView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED), 
  3.                  MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
  4. mWebView.layout(0, 0, mWebView.getMeasuredWidth(), mWebView.getMeasuredHeight()); 
  5. mWebView.setDrawingCacheEnabled(true); 
  6. mWebView.buildDrawingCache(); 
  7. Bitmap longImage = Bitmap.createBitmap(mWebView.getMeasuredWidth(), 
  8.         mWebView.getMeasuredHeight() + endHeight, Bitmap.Config.ARGB_8888); 
  9. Canvas canvas = new Canvas(longImage);  // 画布的宽高和 WebView 的网页保持一致 
  10. Paint paint = new Paint(); 

      推荐阅读

      成熟期滞后状态的云计算:应重视云存储及安全策略

    赓续增长的存储需求促使很多企业转向云计算。云计算是新实际,但确保云存储在安然,机能和可扩大性方面获得恰当构建也至关重要。 云计算响应筹划成“大年夜杂烩”怎么办?分析机构>>>详细阅读


    本文标题:Android截屏与WebView长图分享经验总结

    地址:http://www.17bianji.com/lsqh/35456.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)