一般的app如果有用户概念的,肯定会涉及到用户头像自定义的功能,用户需要的头像要么从本地图库里面获取后截取,要么直接拍照然后截取,请大家看一下demo
这里拍照用的模拟器,效果不好大家请不要介意
下面将针对这2种方法进行讲解。
步骤
1、点击头像弹出pop框,可以提供选择是拍照还是从图库选择
2、拍照和图库选择完图片之后,进行图片缩放,选择适合的图片准备截取
3、获取截取的图片
4、图片截取完之后,修改成圆形头像
5、保存头像以便上传
下面逐步讲解代码
1、拍照和图库选择图片
a)拍照
执行拍照前,应该先判断SD卡是否存在,如果存在,则直接跳转到拍照界面进行拍照
if (state.equals(Environment.MEDIA_MOUNTED)) {
Intent getImageByCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
/***
* 需要说明一下,以下操作使用照相机拍照,拍照后的图片会存放在相册中的
* 这里使用的这种方式有一个好处就是获取的图片是拍照后的原图
* 如果不使用ContentValues存放照片路径的话,拍照后获取的图片为缩略图不清晰
*/
ContentValues values = new ContentValues();
photoUri=getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
getImageByCamera.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri); startActivityForResult(getImageByCamera, REQUEST_CODE_TAKE_PHOTO);
}
这里需要注意的地方是,必须用ContentValues存放照片路径,不然拍照后获取的图片为缩略图不清晰
b)从图库获取图片
// 选择照片的时候也一样,我们用Action为Intent.ACTION_GET_CONTENT,
// 有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, REQUEST_CODE_USER_ALBUM);
2、选择完图片之后,进行图片缩放,选择适合的图片准备截取
上面选择完图片,我们用了startActivityForResult跳转回界面,在这里我们需要用onActivityResult来接收
protected void onActivityResult(