Android开发 截屏

具体步骤

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.使用

下面介绍两种截屏

  1. 直接绘制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();
                }
  1. 拼接式(可忽略不需要的画面)
                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();
                }

原图:
在这里插入图片描述
方式一
在这里插入图片描述
方式二
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值