这是现在很多软件里面很常用的功能;
首先说下布局:布局文件非常简单,使用的是一个自定义的圆形头像;
当点击圆形头像的时候弹出一个popWindow,然后点击拍照,相册的时候调用系统的相机和系统的相册
布局文件:(circleImageView是一个自定义的控件集成ImageView)
<!-- xmlns:app="http://schemas.android.com/apk/res-auto" 这个必须写上,不然不生效
app:border_color="#00000000" 去掉黑边框 -->
<com.circle.www.view.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/circleImageView"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
app:border_color="#00000000"
android:src="@drawable/g"
/>
activity:调用系统相机相册:
int REQUESTCODE_CAMERA = 0;
int REQUESTCODE_GALLERY = 1;
int REQUESTCODE_CROP = 2;
Bitmap changedImage;
String newPath = null;
Uri outputUri = null;
// 启用系统相机
protected void showCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUESTCODE_CAMERA);
}
// 启用系统
protected void showPhone() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent, REQUESTCODE_GALLERY);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 相机回调
if (requestCode == REQUESTCODE_CAMERA) {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
changedImage = (Bitmap) bundle.get("data");
circleImageView.setImageBitmap(changedImage);
}
}// 相册回调
else if (requestCode == REQUESTCODE_GALLERY) {
if (resultCode == RESULT_OK) {
String path = FileUtils.getPictureSelectedPath(data, this);
newPath = CacheUtils.getImagePath(this, "sendImage/"
+ TypeConverter.getUUID() + ".jpg");
try {
Bitmap bitmap = ImageResizer.decodeSampledBitmapFromFile(
path, 400, 400);
FileUtils.compressAndWriteFile(bitmap, this, newPath);
startPhotoZoom(this, Uri.fromFile(new File(newPath)));
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 裁剪回调
else if (requestCode == REQUESTCODE_CROP) {
if (resultCode == RESULT_OK) {
try {
changedImage = BitmapFactory
.decodeStream(getContentResolver().openInputStream(
outputUri));
circleImageView.setImageBitmap(changedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
private void startPhotoZoom(Activity activity, Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
intent.putExtra("scale", true);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
activity.startActivityForResult(intent, REQUESTCODE_CROP);
}
源码下载地址:
http://download.csdn.net/detail/zheng_jiao/9508966