调用相册,相机读取图片设置头像

最近开发时有设置圆形头像的需求,以前没写过,现在学习一下;

点击条目,从底部弹出dialog进行图片路径选择,然后调用相机或者图库选择图片在ImageView上显示圆形图片;

相机7.0适配,加权限,这些就不写了;

dialog使用的第三方传送门需要在Application中初始化


StyleDialog自带取消按钮,有很多弹窗样式,这里用的底部弹出;

 List<String> list =new ArrayList<>();
                    list.add("拍照");
                    list.add("选取图片");
                    StyledDialog.buildBottomItemDialog(list, "", new MyItemDialogListener() {//list添加按钮名称,""为空就行没用
                        @Override
                        public void onItemClick(CharSequence charSequence, int i) {
                            if (i==0) {//第一个按钮调取相机
                                Intent intent = new Intent();
                                intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//配置
                                intent.addCategory(Intent.CATEGORY_DEFAULT);
                                startActivityForResult(intent,0);
                            }
                            if (i==1) {//第二个按钮调取图库
                               Intent intent = new Intent();
                                intent.setAction(Intent.ACTION_GET_CONTENT);
                                intent.setType("image/*");
                                startActivityForResult(intent,1);
                            }
                        }
                    }).show();//不要忘了这个
Intent设置好了可以打开相机和图库了,我们需要的图片需要用onActivityResult将它们的返回;使用Glide将图片进行切圆,一切OK;
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == 0) {
                Bitmap bitmap = (Bitmap) data.getExtras().get("data");//得到的是bitmap,glide不能使用,所以转换为字节流
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);//压缩格式,图片的质量,输出流
                byte[] bytes=baos.toByteArray();

                Glide.with(mActivity)
                        .load(bytes)//glide支持字节流
                        .error(R.mipmap.ic_launcher)//错误时显示的图片
                        .placeholder(R.mipmap.ic_launcher)//占位使用的图片
                        .transform(new BitmapTransformation[]{new GlideCircleTransform(mActivity)})//切圆
                        .into(imageView);//设置图片的View
            }
            if (requestCode == 1) {
                Glide.with(mActivity)
                        .load(data.getData())//得到的是uri可以直接使用
                        .error(R.mipmap.ic_launcher)
                        .placeholder(R.mipmap.ic_launcher)
                        .transform(new BitmapTransformation[]{new GlideCircleTransform(mActivity)})
                        .into(imageView);
            }
    }


猜你喜欢

转载自blog.csdn.net/qq_41509999/article/details/80946076