二、WebView 生成长图
介绍 web 长图之前,先来说一下单屏图片的生成筹划,和手机截图不合的是生成的图片不会显示顶部的状况栏、标题栏以及底部的菜单栏,可以知足不合的营业需求。
- // WebView 生成当前屏幕大年夜小的图片,shortImage 就是最毕生成的图片
- Bitmap shortImage = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.RGB_565);
- Canvas canvas = new Canvas(shortImage); // 画布的宽高和屏幕的宽高保持一致
- Paint paint = new Paint();
- canvas.drawBitmap(shortImage, screenWidth, screenHeight, paint);
- mWebView.draw(canvas);
有的时刻我们须要将一个长 Web 网页生成图片分享出去,类似的例子就是手机端的各类便签应用,当便签内容超出一屏时,就须要将所有的内容生成一张长图对外分享出去。
WebView 和其他 View 一样,体系都供给了 draw 办法,可以直接将 View 的内容衬着到画布上,有了画布我们就可以在膳绫擎绘制其他各类各类的内容,比如底部添加 Logo 图片,画红线框等等。关于 WebView 生成长图网上已经有很多现成的筹划和代码,以下代码是经测试过的稳定版本,供参考。
- // WebView 生成长图,也就是跨越一屏的图片,代码中的 longImage 就是最后生成的长图
- mWebView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED),
- MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
- mWebView.layout(0, 0, mWebView.getMeasuredWidth(), mWebView.getMeasuredHeight());
- mWebView.setDrawingCacheEnabled(true);
- mWebView.buildDrawingCache();
- Bitmap longImage = Bitmap.createBitmap(mWebView.getMeasuredWidth(),
- mWebView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(longImage); // 画布的宽高和 WebView 的网页保持一致
- Paint paint = new Paint();
- canvas.drawBitmap(longImage, 0, mWebView.getMeasuredHeight(), paint);
- 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 内核源代码,最终我们找到懂得决该问题的办法,下面用关键代率攀来解释一下具体的实现方法。
- // 这里的 mWebView 就是 X5 内核的 WebView ,代码中的 longImage 就是最后生成的长图
- mWebView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED),
- MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
- mWebView.layout(0, 0, mWebView.getMeasuredWidth(), mWebView.getMeasuredHeight());
- mWebView.setDrawingCacheEnabled(true);
- mWebView.buildDrawingCache();
- Bitmap longImage = Bitmap.createBitmap(mWebView.getMeasuredWidth(),
- mWebView.getMeasuredHeight() + endHeight, Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(longImage); // 画布的宽高和 WebView 的网页保持一致
- Paint paint = new Paint();
推荐阅读
赓续增长的存储需求促使很多企业转向云计算。云计算是新实际,但确保云存储在安然,机能和可扩大性方面获得恰当构建也至关重要。 云计算响应筹划成“大年夜杂烩”怎么办?分析机构>>>详细阅读
本文标题:Android截屏与WebView长图分享经验总结
地址:http://www.17bianji.com/lsqh/35456.html
1/2 1