手记

android 把View 转成Bitmap 并保存到手机相册

/**
 * 保存到系统相册
 *
 * @param context
 * @param bmp
 */
public void saveImageToGallery(final Context context, final Bitmap bmp) {
    // TODO: 2017/2/20 android6.0权限申请https://github.com/anthonycr/Grant
    PermissionsManager.getInstance().requestPermissionsIfNecessaryForResult((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, new PermissionsResultAction() {
        @Override
        public void onGranted() {
            // 首先保存图片
            File appDir = new File(Environment.getExternalStorageDirectory(), AppConfig.IMAGE_CAHE);
            if (!appDir.exists()) {
                appDir.mkdir();
            }
            String fileName = System.currentTimeMillis() + ".jpg";
            File file = new File(appDir, fileName);
            try {
                FileOutputStream fos = new FileOutputStream(file);
                bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                fos.flush();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 其次把文件插入到系统图库
            try {
                MediaStore.Images.Media.insertImage(context.getContentResolver(),
                        file.getAbsolutePath(), fileName, null);
                toastShow("保存成功");
                dismissProgressDialog();
            } catch (FileNotFoundException e) {
                toastShow("保存失败");
                e.printStackTrace();
            }
        }

        @Override
        public void onDenied(String permission) {
            Toast.makeText(context,
                    "Sorry, we need the Storage Permission to do that",
                    Toast.LENGTH_SHORT).show();
        }
    });
    // 最后通知图库更新
    context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
}


/**
 * todo View 转Bitmap
 *
 * @param v
 * @return
 */
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;
}

原文链接:http://www.apkbus.com/blog-146564-63098.html

0人推荐
随时随地看视频
慕课网APP