直接来代码(注释足够清楚了):
选择图片.setOnClickListener(new View.OnClickListener(){
gallery();
});
private void gallery() {
// 选择本地图片
Intent intent = new Intent(Intent.ACTION_PICK,null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
// 开启一个带有返回值的Activity
startActivityForResult(intent, 2);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2) {
if (data != null) {
// 得到图片的路径
Uri uri = data.getData();
crop(uri);
}
} else if (requestCode == 3) {
// 从剪切图片返回的数据
if (data != null) {
getPic(data);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
/*
* 剪切图片
*/
private void crop(Uri uri) {
// 裁剪图片
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框的比例,1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 裁剪后输出图片的尺寸大小
// 这里吐槽下:X Y的值在返回的是data的时候,不同的手机能够承受的上限是不一样的,
// 举个例子:之前写到405:VIVO X6没有任何问题,而在小米note4上就抛了SecurityException!
intent.putExtra("outputX", 250);
intent.putExtra("outputY", 250);
// intent.putExtra("outputFormat", "PNG");// 图片格式
// intent.putExtra("noFaceDetection", true);// 取消人脸识别
intent.putExtra("return-data", true);
// 开启一个带有返回值的Activity
startActivityForResult(intent, 3);
}
/**
* @author xixili
* created at 2016/2/27 14:32
* 获取剪切之后的图片
*/
private void getPic(Intent picdata) {
Bundle extras = picdata.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");//转换为Bitmap类型
if(photo!=null){
aCache.put("ShakeBgFromUser",photo); //保存在缓存里,ACache是我用的一个缓存框架
imageView.setImageBitmap(photo);//展示
}
}
}