最近开发时有设置圆形头像的需求,以前没写过,现在学习一下;
点击条目,从底部弹出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_PICK);
intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
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);
}
}