需求:
1.界面显示“正常界面内容”,无“二维码”模块,切记,仅仅只会显示“正常界面显示内容”
2.当点击分享时,分享一张长图,长图包含“正常显示内容”+“二维码”
3.实现方式
① 当用户点击分享,此时在保存图片到本地的步骤设置“二维码”模块显示,等保存成功后隐藏,
这样通过scrollview计算截取长图(切记需要加个几百毫秒延时,否则会出现截图包含不了二维码计算),可将整张图截取完全,最后弹出分享框分享各渠道。
/** * 截取scrollview的屏幕 * * @param scrollView 滑动控件 * @return bitmap图片 */ public Bitmap getBitmapByView(NestedScrollView scrollView) { int h = 0; Bitmap bitmap; // 获取scrollview实际高度 for (int i = 0; i < scrollView.getChildCount(); i++) { h += scrollView.getChildAt(i).getHeight();//获取scrollView的屏幕高度 scrollView.getChildAt(i).setBackgroundColor( Color.parseColor("#ffffff")); } //如果传的参数不是NestedScrollView,则不需要循环遍历高度 // h += scrollView.getHeight();//获取scrollView的屏幕高度 // scrollView.setBackgroundColor( // Color.parseColor("#ffffff")); // 创建对应大小的bitmap bitmap = Bitmap.createBitmap(scrollView.getWidth(), h, Bitmap.Config.RGB_565); final Canvas canvas = new Canvas(bitmap);//把创建的bitmap放到画布中去 scrollView.draw(canvas);//绘制canvas 画布 return bitmap; }
②将两个布局生成bitmap,然后进行合成(当前的没有具体试过,
具体链接:https://blog.csdn.net/jabony/article/details/104375486)
private Bitmap mergeBitmap(Bitmap firstBitmap, Bitmap secondBitmap) {
int w1 = firstBitmap.getWidth();
int h1 = firstBitmap.getHeight();
int w2 = secondBitmap.getWidth();
int h2 = secondBitmap.getHeight();
int space = 20;
Bitmap bitmap = Bitmap.createBitmap(w1, h1 + h2 + 40,
firstBitmap.getConfig());
Canvas canvas = new Canvas(bitmap);
canvas.drawRGB(255, 255, 255);
canvas.drawBitmap(firstBitmap, new Matrix(), null);
int left = w1 - w2 > 0 ? ((w1 - w2) / 2) : 0;
canvas.drawBitmap(secondBitmap, left, h1 + 20, null);
return bitmap;
}