Android 设置用户头像 -》拍照/相册选择+裁剪 实现
核心代码:
private static final int REQUEST_IMAGE_CAPTURE = 1; //拍照
private static final int REQUEST_IAMGE_SYSTEM = 2; //相册
private static final int PHOTO_RESULT = 3; //裁剪后返回结果
onCreate() 函数中:
ImageButton camera = (ImageButton)findViewById(R.id.image_camera);
camera.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(RegisterSecondActivity.this).setItems(R.array.take_photo, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
takePhoto();
break;
case 1:
getPictureFromSystem();
break;
}
}
}).show();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_IMAGE_CAPTURE) {
File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
startPhotoZoom(Uri.fromFile(picture));
}
if (requestCode == REQUEST_IAMGE_SYSTEM) {
startPhotoZoom(data.getData());
}
if (requestCode == PHOTO_RESULT) {
if (data != null) {
setPicToView(data);
}
}
}
super.onActivityResult(requestCode, resultCode, data);
}
//拍照获得图片
public void takePhoto() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")));
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
//从相册获得图片
public void getPictureFromSystem() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
startActivityForResult(intent, REQUEST_IAMGE_SYSTEM);
}
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true");
//裁剪的宽高比
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_RESULT);
}
public void setPicToView(Intent data) {
ImageButton camera = (ImageButton)findViewById(R.id.image_camera);
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
camera.setImageBitmap(photo);
}
}
参考:
http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304970.html
http://blog.csdn.net/lcore/article/details/8926336
http://blog.csdn.net/reality_jie_blog/article/details/17839591
浙公网安备 33010602011771号