Android Studio中如何将ProgressBar居中显示在RoundedImageView上层
实现方案
第一步:调整布局的ProgressBar对齐规则
你现有的布局结构已经满足进度条叠加在图片上的层级要求,仅需要修改ProgressBar的属性,无需固定边距即可实现始终在RoundedImageView中心展示:
右侧布局修改
将原ProgressBar的属性替换为以下内容:
<ProgressBar android:id="@+id/pb" android:layout_width="30dp" android:layout_height="30dp" android:visibility="gone" android:layout_alignStart="@id/imageIV" android:layout_alignEnd="@id/imageIV" android:layout_alignTop="@id/imageIV" android:layout_alignBottom="@id/imageIV" />
左侧布局修改
和右侧逻辑完全一致,替换原有ProgressBar的属性即可:
<ProgressBar android:id="@+id/pb" android:layout_width="30dp" android:layout_height="30dp" android:visibility="gone" android:layout_alignStart="@id/imageIV" android:layout_alignEnd="@id/imageIV" android:layout_alignTop="@id/imageIV" android:layout_alignBottom="@id/imageIV" />
第二步:业务逻辑控制进度条显隐
- 当触发图片加载操作时(包括发送方上传本地图片、接收方下载远端图片),先将ProgressBar设置为可见状态
View.VISIBLE - 当图片加载完成(含成功、失败场景),将ProgressBar设置为隐藏状态
View.GONE
如果使用Glide等主流图片加载框架,可以直接在请求回调中控制状态,示例代码如下:
// 加载前先显示进度条 pb.visibility = View.VISIBLE Glide.with(context) .load(图片资源路径/本地Uri/远端地址) .listener(object : RequestListener<Drawable> { override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean { // 加载失败隐藏进度条 pb.visibility = View.GONE return false } override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { // 加载成功隐藏进度条 pb.visibility = View.GONE return false } }) .into(imageIV)
内容的提问来源于stack exchange,提问作者SSS
相关产品推荐
相关产品推荐

