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

Android Studio(Java)自定义进度条求助:按进度变色及样式调整

问题修复方案与原因解释

问题原因分析

当前代码存在三个核心问题:

  1. 边框被完全覆盖:进度层未设置内边距,导致进度内容填满整个进度条区域,直接遮挡了背景层的棕色边框,所以只显示绿色块。
  2. 颜色无法动态切换:进度层仅定义了固定绿色,没有实现"进度>40%显示绿色、≤40%显示红色"的逻辑。
  3. 圆角不匹配:进度层圆角(30dp)与背景层圆角(50dp)不一致,且无内边距补偿,导致圆角显示异常。

修复后的完整代码

1. 创建进度颜色的Level List(drawable/progress_level_list.xml)

用于根据进度范围切换不同颜色的进度块:

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 进度≤40%时显示红色(level范围0-4000,对应progress 0-40) -->
    <item
        android:maxLevel="4000"
        android:drawable="@drawable/progress_red" />
    <!-- 进度>40%时显示绿色(level范围4001-10000,对应progress 41-100) -->
    <item
        android:minLevel="4001"
        android:maxLevel="10000"
        android:drawable="@drawable/progress_green" />
</level-list>

2. 红色进度块(drawable/progress_red.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#D32F2F" />
    <!-- 圆角=背景圆角-边框宽度(50dp-10dp),保证与边框圆角匹配 -->
    <corners android:radius="40dp" />
</shape>

3. 绿色进度块(drawable/progress_green.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#238A23" />
    <corners android:radius="40dp" />
</shape>

4. 自定义进度条背景(drawable/custom_progress_bar.xml)

添加内边距避开边框,使用scale实现水平进度缩放:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 背景层:棕色边框+透明填充+圆角 -->
    <item android:id="@android:id/background">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="10dp"
                android:color="#614328" />
            <corners android:radius="50dp" />
        </shape>
    </item>

    <!-- 进度层:设置内边距避开边框,引用level-list实现颜色切换 -->
    <item android:id="@android:id/progress"
        android:insetLeft="10dp"
        android:insetRight="10dp"
        android:insetTop="10dp"
        android:insetBottom="10dp">
        <scale android:scaleWidth="100%">
            <drawable android:drawable="@drawable/progress_level_list" />
        </scale>
    </item>
</layer-list>

5. 布局中的ProgressBar代码(保持原样即可)

<ProgressBar
    android:id="@+id/PBfullness"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="130dp"
    android:layout_height="60dp"
    android:max="100"
    android:progress="100"
    android:layout_marginTop="9dp"
    android:layout_marginLeft="110dp"
    android:progressDrawable="@drawable/custom_progress_bar" />

额外说明

  • Level值对应关系:ProgressBar的level = progress * 100(因为max设为100),所以40%对应level=4000。
  • 若需要动态更新进度,在代码中调用PBfullness.setProgress(progressValue)即可自动切换颜色。

内容的提问来源于stack exchange,提问作者sj1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:05:02