背景:在webview加载的h5页面中点击直接生成图片并分享至微信,因为是直接生成,所以截屏分享并不合适,考虑到截屏截的图最初也是由布局文件绘制而来的,那么有没办法直接把布局文件转化为一个图片呢?还真有,代码注释很详细了
final View view = LayoutInflater.from(WebViewActivity.this).inflate(R.layout.share_red_packet_layout, null);
final int qrCodeSize = DisplayParseUtil.dp2px(SalesApplication.getContext(), 140);
//动态设置view中子view的属性
TextView nameTv = view.findViewById(R.id.name);
nameTv.setText("哇哈哈");
//分享出去的是携带有二维码的海报,调用zxing生成二维码
ImageView qrCodeImage = view.findViewById(R.id.qrCode);
qrCodeImage.setImageBitmap(QRCodeEncoder.syncEncodeQRCode(url, qrCodeSize, Color.parseColor("#000000"), null));
//设置view的大小,注意对MeasureSpec的理解
view.measure(View.MeasureSpec.makeMeasureSpec(mWebViewContainer.getWidth(), View.MeasureSpec.AT_MOST),
View.MeasureSpec.makeMeasureSpec(mWebViewContainer.getHeight(), View.MeasureSpec.AT_MOST));
//设置布局的尺寸和位置
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
//创建bitmap用于存储view信息,如果view中图片没有涉及到透明度,那么可以设置Bitmap.Config.RGB_565以节省内存
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
Bitmap.Config.ARGB_8888);
//利用bitmap生成画布
Canvas canvas = new Canvas(bitmap);
//把view中的内容绘制在画布上,布局view也就保存到了bitmap上了,然后你就可以对bitmap为所欲为啦啦啦
view.draw(canvas);
网友评论