android 调用系统的剪切功能,Android编程实现调用系统图库与裁剪图片功能

本文实例讲述了Android编程实现调用系统图库与裁剪图片功能。分享给大家供大家参考,具体如下:

在Android开发中,调用系统图库和裁剪照片是很常见的需求。相对于自己实现这种功能,直接调用系统具有诸多优点,如不用考虑屏幕适配,不用担心性能问题,等等。因此,对于一般的需求,建议直接调用系统的功能,简便高效!

首先上效果图:

0f56fb0471d7ee6e310c96562f7b3bc4.png 

4e540f0d5d7f41aff5a30e60ee0a5e1f.png 

379f40fbae1a6b785868e00ddc26e6cf.png

一、只调用系统图库(不裁剪),返回用户选择的图片。(只支持单选,如需多选则需要自己实现,可参考Android编程实现仿QQ照片选择器(按相册分类显示,多选添加)

1.跳转至系统图库页面:

Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(i, SELECT_IMAGE);

2.在onActivityResult中接收系统图库返回的信息(也就是用户选择的照片)。

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode != RESULT_OK || data == null) {

return;

}

//select an image

if (requestCode == SELECT_IMAGE) {

//get image path from uri

String imagePath = getImagePath(data.getData());

return;

}

}

private String getImagePath(Uri selectedImage) {

String[] filePathColumn = {MediaStore.Images.Media.DATA};

Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);

cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);

String imagePath = cursor.getString(columnIndex);

cursor.close();

System.out.println("image path:" + imagePath);

return imagePath;

}

二、跳转至系统图库,选择照片,并裁剪。

1.跳转至系统图库:

//select image via system gallery, crop and save the new image file.

public void selectImageAndCrop(View view) {

//After cropping, the image file will be stored here!

cacheFile = imageCacheFolder + File.separator + "cache_" + System.currentTimeMillis() + ".jpg";

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("image/*");

intent.putExtra("crop", "true");

//width:height

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

intent.putExtra("output", Uri.fromFile(new File(cacheFile)));

intent.putExtra("outputFormat", "JPEG");

startActivityForResult(Intent.createChooser(intent, "Choose Image"), SELECT_IMAGE_CROP);

}

跳转之前需要传递的数据:

(1)crop:传递一个true,告诉系统需要裁剪。

(2)aspectX和aspectY:裁剪框的宽高比。

(3)output:需要传递一个由文件路径cacheFile构建的uri,用户在图库页面选择照片之后会自动进入裁剪页面,裁剪之后图片会被保存在cacheFile这个位置。

裁剪完成之后,同样会回调onActivityResult方法(resultCode为RESULT_OK),并且图片会被保存在cacheFile这个位置,因此可以直接使用这个文件,例如将其设置为ImageView的资源。

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode != RESULT_OK) {

return;

}

//select an image and crop

if (requestCode == SELECT_IMAGE_CROP) {

//compress the original image to save memory.

BitmapFactory.Options opt = new BitmapFactory.Options();

opt.inSampleSize = 4;

imageView.setImageBitmap(BitmapFactory.decodeFile(cacheFile, opt));

}

}

希望本文所述对大家Android程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值