安卓实现截图的几种方法

https://blog.csdn.net/u013205623/article/details/60872466?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

 

其中

1.  对指定view进行截图的方法

/**
 * 对单独某个View进行截图
 *
 * @param v
 * @return
 */
private Bitmap loadBitmapFromView(View v) {
    if (v == null) {
        return null;
    }
    Bitmap screenshot;
    screenshot = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
    Canvas c = new Canvas(screenshot);
    c.translate(-v.getScrollX(), -v.getScrollY());
    v.draw(c);
    return screenshot;
}

 

将指定bitmap保存到相册

 

2.动态请求写入sd卡

 private void getPermissions(){
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED)
        {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    1);
            //权限还没有授予,需要在这里写申请权限的代码
        }
        else{
            //权限已申请,执行XXX操作
            saveScreenShot(bitmap);
//            saveImageToGallery(bitmap);
        }
    }

 

 /**屏幕截图保存*/
    private void saveScreenShot(Bitmap bitmap)  {
        String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
        OutputStream outStream = null;
        String filename;//声明文件名
        //以保存时间为文件名
        Date date = new Date(System.currentTimeMillis());
        SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");
        filename =  sdf.format(date);
        File file = new File(extStorageDirectory, filename+".JPEG");//创建文件,第一个参数为路径,第二个参数为文件名
        Log.i("文件的路径",file.getAbsolutePath());
        try {
            outStream = new FileOutputStream(file);//创建输入流
            boolean save=   bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
            Log.i("是否保存成功",save+"");
            outStream.close();
/**       这三行可以实现相册更新
 Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
 Uri uri = Uri.fromFile(file);intent.setData(uri);
 sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!*/
            Toast.makeText(this,"saved",
                    Toast.LENGTH_SHORT).show();
        } catch(Exception e) {
            Toast.makeText(this, "exception:" + e,
                    Toast.LENGTH_SHORT).show();

        }
    }

 

 

 

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

    if (requestCode == 1)
    {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
        {
            Log.i("权限已经获取","权限已经获取");
            //Toast.makeText(XXXActivity.this, "Permission GET", Toast.LENGTH_SHORT).show();
        } else
        {
            // Permission Denied
            //Toast.makeText(XXXActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
        }
    }else{
        //申请其它权限
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);


    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值