需求: webView 加载的超长页面,要求点击将整个页面分享至微信、朋友圈。
思考:
1.系统截屏,只能截取屏幕大小,不满足要求。
2.将View保存为图片
⑴普通View
private Bitmap loadBitmapFromView(View v) {
int w = v.getWidth();
int h = v.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
c.drawColor(Color.WHITE); /** 如果不设置canvas画布为白色,则生成透明 */
v.layout(0, 0, w, h);
v.draw(c);
return bmp;
}
⑵WebView
private static Bitmap captureWebView(WebView webView) { Picture snapShot = webView.capturePicture(); Bitmap bitmap = Bitmap.createBitmap(snapShot.getWidth(), snapShot.getHeight(), Bitmap.Config.ARGB_4444); Canvas canvas = new Canvas(bitmap); snapShot.draw(canvas); return bitmap; }
使用WebView提供的方法计算长度,5.0以上可能会显示保存不全,5.0以上进行了优化先渲染一部分,滚动再渲染导致,
解决方案 Activity setContent()之前设置渲染整个页面
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
WebView.enableSlowWholeDocumentDraw();
}
分享的时候可能由于页面太长压缩图片模糊,不压缩分享SDK限制分享不了,使用原生分享可解决问题。