1.工具类
public class SVPictureUtil {
/**
* 直接绘制编整个scrollview、NestedScrollView
*
* @param sv scrollview、NestedScrollView
* @return
*/
public static Bitmap getPicture(FrameLayout sv) {
int h = 0;
for (int i = 0; i < sv.getChildCount(); i++) {
h += sv.getChildAt(i).getHeight();
sv.getChildAt(i).setBackgroundColor(
Color.parseColor("#ffffff"));
}
Bitmap bitmap = Bitmap.createBitmap(sv.getWidth(), h, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
sv.draw(canvas);
return bitmap;
}
/**
* 将view生成bitmap,添加边距
*
* @param view
* @param paint
* @param pxfor20dp 增加宽度(为两边留白)
* @param pxfor10dp 增加高度
* @return
*/
public static Bitmap marginPicture(View view, Paint paint, int pxfor20dp, int pxfor10dp) {
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.RGB_565);
Canvas canvas1 = new Canvas(bitmap);
view.draw(canvas1);
Bitmap bitmapB = Bitmap.createBitmap(view.getWidth() + pxfor20dp,
view.getHeight() + pxfor10dp, Bitmap.Config.RGB_565);
Canvas canvasC = new Canvas(bitmapB);
canvasC.drawRect(0, 0, bitmapB.getWidth() + pxfor20dp,
bitmapB.getHeight() + pxfor10dp, paint);
canvasC.drawBitmap(bitmap, pxfor20dp / 2, 0, null);
bitmap.recycle();
return bitmapB;
}
/**
* 合并bitmap
*
* @param mainBitmap 上面bitmap
* @param second 下面bitmap
* @param spacing 间距
* @param paint
* @return
*/
public static Bitmap addBitmapMain(Bitmap mainBitmap, Bitmap second, int spacing, Paint paint) {
int secondH = mainBitmap.getWidth() * second.getHeight() / second.getWidth();
second = Bitmap.createScaledBitmap(second, mainBitmap.getWidth(), secondH, true);
int width = mainBitmap.getWidth();
int height = mainBitmap.getHeight() + second.getHeight();
Bitmap result = Bitmap.createBitmap(width, height + spacing, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(result);
//绘制背景
canvas.drawRect(0, 0, width, height + spacing, paint);
canvas.drawBitmap(mainBitmap, 0, 0, null);
canvas.drawBitmap(second, 0, mainBitmap.getHeight() + spacing, null);
mainBitmap.recycle();
second.recycle();
return result;
}
}
2.使用
下面介绍两种截屏
- 直接绘制scrollview(一锅端)
Bitmap svBitmap = SVPictureUtil.getPicture(sv);
File file = new File(getExternalCacheDir().getAbsolutePath(), UUID.randomUUID().toString() + ".jpg");
Log.d("file path", file.getAbsolutePath().toString());
try {
file.createNewFile();
OutputStream fileOutputStream = new FileOutputStream(file);
svBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
- 拼接式(可忽略不需要的画面)
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.FILL);
int dp2px_20 = DensityUtil.dp2px(20);
int dp2px_10 = DensityUtil.dp2px(10);
Bitmap resultBm;
Bitmap bm1 = SVPictureUtil.marginPicture(ll1, paint, dp2px_20, dp2px_10);
Bitmap bm2 = SVPictureUtil.marginPicture(ll2, paint, dp2px_20, dp2px_10);
resultBm = SVPictureUtil.addBitmapMain(bm1, bm2, 0, paint);
Bitmap tBm = SVPictureUtil.marginPicture(ll3, paint, dp2px_20, 0);
resultBm = SVPictureUtil.addBitmapMain(resultBm, tBm, 0, paint);
//合并一张自定义图片
resultBm = SVPictureUtil.addBitmapMain(resultBm, BitmapFactory.decodeResource(getResources(), R.drawable.qr_code), 0, paint);
File file = new File(getExternalCacheDir().getAbsolutePath(), UUID.randomUUID().toString() + ".jpg");
Log.d("file path", file.getAbsolutePath().toString());
try {
file.createNewFile();
OutputStream fileOutputStream = new FileOutputStream(file);
resultBm.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
原图:
方式一
方式二