更换头像用相机拍摄或者从相册选择

private static final int TAKE_PHOTO = 1;    //打开相机的请求码
private static final int CROP_PHOTO = 2;    //裁剪图片的请求码
private static final int CHOICE_PHOTO = 3;    //选择图片的请求码
private Uri imageUri;   //图片uri地址
定义请求码 、Uri 以及找到 ImageView或者自定义 ImageView控件。


case R.id.main_img_circle:
    //头像的点击事件、弹出对话框
    AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
    AlertDialog dialog = builder.create();
    dialog.setTitle("更换头像");
    dialog.setButton("选择照片", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            choicePhoto();  //调用选择照片方法
        }
    });
    dialog.setButton2("拍摄", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            takePhoto();    //调用拍摄方法
        }
    });
    dialog.show();
    break;

点击头像弹出对话框,执行相应的操作。


//拍摄方法
private void takePhoto() {
    File outputImage = new File(Environment.getExternalStorageDirectory(), "tempImage.jpg"); //创建文件在sd卡并命名
    try {
        if (outputImage.exists()){
            outputImage.delete();   //如果文件存在则删除文件
        }
        outputImage.createNewFile();    //创建文件
    } catch (IOException e) {
        e.printStackTrace();
    }
    imageUri = Uri.fromFile(outputImage);   //将文件转化为Uri地址
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");   //设置Intent的action
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //跳转到相机拍摄
    startActivityForResult(intent, TAKE_PHOTO); //相机执行完回调到onActivityResult方法
}

上面是调用相机拍摄的方法。


//选择照片方法
private void choicePhoto() {
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_PICK);   //设置intent的action
    intent.setType("image/*");  //设置类型
    startActivityForResult(intent, CHOICE_PHOTO);   //照片选择完回调到onActivityResult方法
}

上面是调用图库来选择照片的方法,因为android系统版本问题而导致选择完图片不能裁剪。所以用以上方法选择图片后不裁剪来设置头像。


@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode){
            case TAKE_PHOTO:    //相机执行完的回调
                if (resultCode == mActivity.RESULT_OK){
                    Intent intent = new Intent("com.android.camera.action.CROP");   //跳转到图片裁剪
                    intent.setDataAndType(imageUri, "image/*"); //设置数据和类型
                    intent.putExtra("scale", true);     //设置可缩放
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //设置位置
                    startActivityForResult(intent, CROP_PHOTO); //裁剪执行完同样回调到onActivityResult方法
                }
                break;
            case CROP_PHOTO:    //裁剪执行完的回调
                if (resultCode == mActivity.RESULT_OK){
                    holder.main_img_circle.setImageURI(null);   //先设置为null,防止第二次点击拍摄时头像不更新
                    holder.main_img_circle.setImageURI(imageUri);   //设置头像
                }
                break;
            case CHOICE_PHOTO:      //选择完图片的回调
                if (resultCode == mActivity.RESULT_OK){     //从相册选择照片不裁切
                    try {
                        Uri selectedImage = data.getData(); //获取系统返回的照片的Uri
//                        String[] filePathColumn = { MediaStore.Images.Media.DATA };
//                        Cursor cursor =mActivity.getContentResolver().query(selectedImage,
//                                filePathColumn, null, null, null);//从系统表中查询指定Uri对应的照片
//                        cursor.moveToFirst();
//                        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
//                        String picturePath = cursor.getString(columnIndex);  //获取照片路径
//                        cursor.close();
//                        Uri image_Uri = Uri.parse(picturePath);
//                        Bitmap bitmap= BitmapFactory.decodeFile(picturePath);
//                        picImageView.setImageBitmap(bitmap);
                        holder.main_img_circle.setImageURI(selectedImage);
                        
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                break;
        }
    }

在case为CHOICE_PHOTO那里,因为我是用的自定义ImageView所以不用setImageBitmap方法,而是用setImageURI方法。







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值