如何使用de.hdodenhof.circleimageview.CircleImageView解析Uri?
如何用CircleImageView加载Uri对应的图片
嘿,其实de.hdodenhof.circleimageview.CircleImageView本质是ImageView的子类,它完全支持ImageView的所有图片加载API,包括直接设置Uri的方法,不需要额外的“解析Uri”操作,直接用就行!下面给你一步步说明:
1. 先确认依赖已添加
首先确保你已经在项目的build.gradle(Module级别)里引入了CircleImageView的依赖:
dependencies { implementation 'de.hdodenhof:circleimageview:3.1.0' // 可以替换为最新版本 }
2. 布局里添加CircleImageView
在你的布局XML中定义这个控件:
<de.hdodenhof.circleimageview.CircleImageView android:id="@+id/circleImageView" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/default_avatar" // 设置默认占位图 app:civ_border_width="2dp" // 可选:设置圆形边框宽度 app:civ_border_color="@color/white" /> // 可选:设置圆形边框颜色
3. 代码中加载Uri图片
在Activity/Fragment里,获取到目标Uri后,直接调用setImageUri()方法即可:
// 假设你已经通过相册选择、文件路径转换等方式拿到了目标Uri Uri imageUri = ...; CircleImageView circleImageView = findViewById(R.id.circleImageView); circleImageView.setImageUri(imageUri);
几个要注意的点
- 权限问题:如果Uri指向本地文件(比如相册图片),Android 6.0及以上需要申请
READ_EXTERNAL_STORAGE动态权限,不然会加载失败。 - Android 7.0+ 文件Uri兼容:如果是自己生成的本地文件Uri,别直接用
Uri.fromFile(),得用FileProvider生成Content Uri,避免触发FileUriExposedException。 - 进阶加载方案:如果需要处理占位图、错误图或缓存,可以配合Glide/Picasso等图片加载库使用,比如:
Glide.with(this) .load(imageUri) .placeholder(R.drawable.default_avatar) .error(R.drawable.error_avatar) .into(circleImageView);
举个完整的从相册选图并加载的例子:
// 启动相册选择Intent Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(pickIntent, 100); // 在onActivityResult中处理返回的Uri(AndroidX推荐用ActivityResultContracts) @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 100 && resultCode == RESULT_OK && data != null) { Uri selectedImageUri = data.getData(); CircleImageView civ = findViewById(R.id.circleImageView); civ.setImageUri(selectedImageUri); } }
内容的提问来源于stack exchange,提问作者neil tan
相关产品推荐
相关产品推荐

