public class PickAndCropActivity extends AppCompatActivity implements View.OnClickListener
{
public static final int REQUEST_CODE_PICK_IMG = 1;
public static final int REQUEST_CODE_CROP_IMG = 2;
/**
* ImageView展示选择的图片和裁剪得到的图片
*/
private ImageView img;
/**
* 选择得到的图片uri
*/
private Uri mUri;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pick_and_crop);
img = (ImageView) findViewById(R.id.img);
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.pick:
startActivityForResult(IntentUtils.generatePickImgIntent(), REQUEST_CODE_PICK_IMG);
break;
case R.id.crop:
startActivityForResult(IntentUtils.generateCropImgIntent(mUri, 150), REQUEST_CODE_CROP_IMG);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (requestCode)
{
case REQUEST_CODE_PICK_IMG:
if (resultCode != RESULT_OK || data == null) break;
mUri = data.getData();
ContentResolver cr = this.getContentResolver();
try
{
Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(mUri));
img.setImageBitmap(bitmap);
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
break;
case REQUEST_CODE_CROP_IMG:
if (resultCode != RESULT_OK || data == null) break;
Bitmap bmap = data.getParcelableExtra("data");
img.setImageBitmap(bmap);
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
public class IntentUtils
{
/**
* 构造一个选择图片的Intent
*
* @return
*/
public static Intent generatePickImgIntent()
{
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
return intent;
}
/**
* 构造一个裁剪图片的Intent
*
* @param uri
* @param size
* @return
*/
public static Intent generateCropImgIntent(Uri uri, int size)
{
Intent intent = new Intent("com.android.camera.action.CROP");
// mUri是已经选择的图片Uri
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 输出图片大小
intent.putExtra("outputX", size);
intent.putExtra("outputY", size);
intent.putExtra("return-data", true);
return intent;
}
}