您的位置:首页 > 移动开发 > Android开发

朝花夕拾-android 从手机选择图片或拍照设置头像

2015-04-15 16:17 615 查看
Demo源码位置:http://git.oschina.net/zj2012zy/Android-Demo/tree/master/AndroidDemo/headset

一般需要用户信息的好多的也需要设置用户头像,通常设置用户头像的操纵要么从手机选择一张图片,要么直接通过手机拍照进行设置。示意图如下:



另外:制作手机的动态截屏,可以使用应用宝的动态截屏功能,非常的方便。

布局文件很简单:就是两个按钮加一个imageview用来显示设置好的头像,就不说了。

核心代码为如下四个函数:

1.选择一张图片

public static void selectPhoto(Activity activity) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/jpeg");
intent.putExtra("return-data", true);
activity.startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
}


2、拍照并存储

public static String takePicture(Activity activity) {
createDirFile(Environment.getExternalStorageDirectory().getPath() + "/zhaojie/images/");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
String path = Environment.getExternalStorageDirectory().getPath() + "/zhaojie/images/" + timeStamp + ".png";
File file = createNewFile(path);
if (file != null) {
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
}
activity.startActivityForResult(intent, INTENT_REQUEST_CODE_CAMERA);
return path;
}


3、处理拍照或者是选择的照片,截取头像,其中可指定截取头像的大小。

private void cropImageUri(Uri uri, int requestCode) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 320);
intent.putExtra("outputY", 320);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", true);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(intent, requestCode);
}


4、整体流程基本都是通过调用系统activity实现,代码如下

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK)
return;
Bitmap tempPhoto = null;
switch (requestCode) {
case PHOTO_PICKED_WITH_DATA: // ????????
ContentResolver cr = this.getContentResolver();
try {
Uri uri = data.getData();
cropImageUri(uri, PHOTO_CROP_DATA);
// tempPhoto =
// BitmapFactory.decodeStream(cr.openInputStream(uri));
// mStepPhoto.setUserPhoto(tempPhoto);
} catch (Exception e) {
e.printStackTrace();
}
break;
case INTENT_REQUEST_CODE_CAMERA:
tempPhoto = BitmapFactory.decodeFile(headPath);
cropImageUri(Uri.fromFile(new File(headPath)), PHOTO_CROP_DATA);
break;
case PHOTO_CROP_DATA:
tempPhoto = data.getParcelableExtra("data");
mHead.setImageBitmap(tempPhoto);
break;
}
}


文章从简,具体实现请参考demo,欢迎留言讨论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: