上传头像

在整理以前的代码,发现修改头像这块儿代码臃肿,改起来麻烦,看着难受,所以将这块儿重新写了一下(真不知道当时是怎么把这些代码堆到一起的,,o(╥﹏╥)o)!!!

把跳转到系统相机,相册和图片剪裁统一放到了一个工具类里面,然后再activity内进行相关操作,通过接口回调的方式进行UI的更新跳转,剪裁图片,思路有了接下来上代码!!!

弹出一个popup来进行选择去相机还是相册

private void modifyTouXiang() {
    View view = LayoutInflater.from(this).inflate(R.layout.layout_popupwindow, null);
    TextView btnCarema = (TextView) view.findViewById(R.id.btn_camera);
    TextView btnPhoto = (TextView) view.findViewById(R.id.btn_photo);
    TextView btnCancel = (TextView) view.findViewById(R.id.btn_cancel);
    final PopupWindow popupWindow = new PopupWindow(view, 
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    popupWindow.setBackgroundDrawable(getResources().getDrawable(android.R.color.transparent));
    popupWindow.setOutsideTouchable(true);
    View parent = LayoutInflater.from(this).inflate(R.layout.activity_main, null);
    popupWindow.showAtLocation(parent, Gravity.BOTTOM, 0, 0);
    //popupWindow在弹窗的时候背景半透明
    final WindowManager.LayoutParams params = getWindow().getAttributes();
    params.alpha = 0.5f;
    getWindow().setAttributes(params);
    popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
        @Override
        public void onDismiss() {
            params.alpha = 1.0f;
            getWindow().setAttributes(params);
        }
    });
    //取消
    btnCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.dismiss();
        }
    });
    //去相机
    btnCarema.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PhotoSelectUtil.get().goToCamera(PersonInfoActivity.this);
            popupWindow.dismiss();
        }
    });
    //去相册
    btnPhoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PhotoSelectUtil.get().goToPhoto(PersonInfoActivity.this);
            popupWindow.dismiss();
        }
    });
}

跳转到相册进行相关操作

public void goToCamera(Activity context) {
        Log.e(TAG, "goToCamera: 打开系统相机" );
        //创建拍照储存的图片文件
        DATE = new SimpleDateFormat("yyyy_MMdd_hhmmss").format(new Date());
        if (isSdCardExist()) {
            imagePath = FileUtil.createImagePath(APP_NAME + DATE);
            File file = new File(imagePath);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            //跳转到系统相机
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
                //设置7.0中共享文件,分享路径定义在xml/file_paths.xml  
                // 这个需要在 AndroidManifest.xml配置一下
                intent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                //通过FileProvider创建一个content类型的Uri
                Uri contentUri = FileUtil.getFileUri(context, file);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
            } else {
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
            }
            try {
                context.startActivityForResult(intent, REQUEST_CAPTURE);
            } catch (ActivityNotFoundException anf) {
                ToastUtils.show(context, 
                   context.getResources().getString(R.string.camera_not_prepared));
            }
        } else {
            ToastUtils.show(context, 
                   context.getResources().getString(R.string.sdcard_no_exist));
        }

    }

跳转到相册进行操作

public void goToPhoto(Activity activity) {
        Log.e(TAG, "goToPhoto: 打开系统相册" );
        DATE = new SimpleDateFormat("yyyy_MMdd_hhmmss").format(new Date());
        if (isSdCardExist()) {
            Intent intent;
            if (Build.VERSION.SDK_INT < 19) {
                intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
            } else {
                intent = new Intent(Intent.ACTION_PICK,
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            }
            activity.startActivityForResult(intent, REQUEST_PICK);
        }else {
            ToastUtils.show(activity,activity.getResources().getString(R.string.sdcard_no_exist));
        }
    }

 选择完图片并剪裁后会将图片带过来通过onActivityResult获取路径

  public void onActivityResult(Activity activity, int requestCode, int resultCode
            , Intent data, OnResultListener listener) {

        switch (requestCode) {
            case REQUEST_CAPTURE://相机
                if (!TextUtils.isEmpty(imagePath)) {
                    File file = new File(imagePath);
                    if (file.isFile() && listener != null)
                        listener.takePhotoFinish(imagePath);
                    activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, FileUtil.getFileUri(activity, file)));//Uri.fromFile(file)));
                }
                break;
            case REQUEST_PICK://相册
                if (data!=null){
                    Uri uri = data.getData();
                    if (uri != null) {
                        String cropImagePath = FileUtil.getRealFilePathFromUri(activity.getApplicationContext(), uri);
                        File file = new File(cropImagePath);
                        if (file.isFile() && listener != null)
                            listener.selectPictureFinish(cropImagePath);
                    }
                }
                break;
            case REQUEST_CROP_PHOTO:
                if (!TextUtils.isEmpty(crop_image)) {
                    File file = new File(crop_image);
                    Log.e(TAG, "onActivityResult: "+file.isFile());
                    if (file.isFile() && listener != null) {
                        listener.cropPictureFinish(crop_image);
                    }
                    // 最后通知图库更新
                    activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,FileUtil.getFileUri(activity,file)));// Uri.fromFile(file)));
                }
                break;
        }

    }

 public interface OnResultListener {
        //拍照回调
        void takePhotoFinish(String path);

        //选择图片回调
        void selectPictureFinish(String path);

        //截图回调
        void cropPictureFinish(String path);
    }

在activity内调接口

 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        PhotoSelectUtil.get().onActivityResult(PersonInfoActivity.this, requestCode, resultCode, data, new PhotoSelectUtil.OnResultListener() {
            @Override拍照回调
            public void takePhotoFinish(String path) {
                PhotoSelectUtil.get().cropPicture(PersonInfoActivity.this, path, 1, 1);
            }

            @Override相册回调
            public void selectPictureFinish(String path) {
                PhotoSelectUtil.get().cropPicture(PersonInfoActivity.this, path, 1, 1);
            }

            @Override//裁图
            public void cropPictureFinish(String path) {
               //获取到图片路径,进行上传
GlideUtils.loadImageViewCircleImg(this, path, userTouxiangUpdate,R.drawable.ic_xinxitouxi);
            }
        });
    

    }

至此结束,详细代码可以移步githup

https://github.com/Lei6/HeadPortraitUpload2 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值