如何在程序中更改进度条的进度绘制

问题描述 投票:0回答:1

如果值接近最大值,我正在尝试更改进度条内部的颜色,基本上默认进度颜色是橙色,我想将其更改为绿色,我该如何使其工作?

功能:

public static void changeProgressColor(ProgressBar progressBar){
    int progress = progressBar.getProgress();
    if(progressBar.getProgress() >= 50 && progressBar.getProgress() <= 100){
        progressBar.setForeground(ContextCompat.getDrawable(progressBar.getContext(), R.drawable.progress_inside_green));
        progressBar.setProgress(progress);
    }
}

XML:

<ProgressBar
    android:id="@+id/progressBarEnergy"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:indeterminateOnly="false"
    android:progressDrawable="@drawable/circular_progress_bar"
    android:progress="50" />

可绘制(绿色款,橙色款除内部颜色外均相同):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape
            android:shape="ring"
            android:useLevel="false"
            android:thicknessRatio="16" >
            <solid android:color="@color/progressOutside" />
        </shape>
    </item>
    <item>
        <rotate
            android:fromDegrees="90"
            android:toDegrees="90">
            <shape
                android:shape="ring"
                android:useLevel="true"
                android:thicknessRatio="16">
                <solid android:color="@color/progressCloseLimit" />
            </shape>
        </rotate>
    </item>
</layer-list>
java android xml android-drawable
1个回答
0
投票

我可以看到,当进度值大于 50 时,您想要将进度条的颜色更改为绿色。为此,您需要更改进度条的内部颜色,您需要修改您的 @color/progressCloseLimit进度条可像这样绘制:

<resources>
    <color name="progressOutside">@color/your_color</color>
    <color name="progressInsideGreen">@color/your_color</color>
</resources>

修改进度条可绘制对象(@drawable/circular_progress_bar),以在进度处于指定范围内时使用 ProgressInsideGreen 颜色。您可以通过为内部和外部形状创建不同的可绘制对象并使用选择器可绘制对象根据进度值在它们之间进行切换来实现此目的。 以下是可绘制进度条 (circular_progress_bar.xml) 的示例:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Outside color -->
    <item>
        <shape
            android:shape="ring"
            android:useLevel="false"
            android:thicknessRatio="16" >
            <solid android:color="@color/progressOutside" />
        </shape>
    </item>
    
    <!-- Inside color -->
    <item android:id="@android:id/progress">
        <selector>
            <!-- When progress is between 50 and 100, use green color -->
            <item android:state_progress="true" android:state_after="50">
                <shape
                    android:shape="ring"
                    android:useLevel="true"
                    android:thicknessRatio="16">
                    <solid android:color="@color/progressInsideGreen" />
                </shape>
            </item>
            <!-- Default, when progress is not in the specified range, use orange color -->
            <item>
                <shape
                    android:shape="ring"
                    android:useLevel="true"
                    android:thicknessRatio="16">
                    <solid android:color="@color/progressCloseLimit" />
                </shape>
            </item>
        </selector>
    </item>
</layer-list>

通过这些更改,您无需以编程方式更改进度条的颜色;它会根据进度值自动改变。只需确保在 color.xml 文件中定义适当的颜色即可。

© www.soinside.com 2019 - 2024. All rights reserved.