You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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" />

第二步:业务逻辑控制进度条显隐

  1. 当触发图片加载操作时(包括发送方上传本地图片、接收方下载远端图片),先将ProgressBar设置为可见状态View.VISIBLE
  2. 当图片加载完成(含成功、失败场景),将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:45:01