带有两个指示器的进度条

8

我希望有一个带有两个指示器的进度条。

其中一个指示器以绿色显示任务A的进度,第二个指示器以红色显示任务B的进度,全部在一个进度条中展示。其余部分则显示任务A和B的剩余部分。

有没有(简单)的解决方案来实现这一点?我已经阅读了文档,但没有找到帮助。

2个回答

12

可以通过将这两个指示器编码为同一进度条的主进度和次进度来实现。

为进度条创建一个子类。

public class TextProgressBar extends ProgressBar {
    private Paint textPaint;

    public TextProgressBar(Context context) {
        super(context);
        textPaint = new Paint();
        textPaint.setColor(Color.BLACK);
    }

    public TextProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        textPaint = new Paint();
        textPaint.setColor(Color.BLACK);
        setMax(30);
        setProgress(12);
        setSecondaryProgress(20);

    }

}

必须使用此子类引用进度条的XML条目。

<com.darsh.doubleProgressBar.TextProgressBar
    android:id="@+id/progressBar1"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="15sp"
    android:layout_marginLeft="1sp"
    android:layout_marginRight="1sp"
    android:layout_marginTop="10sp"
    android:progressDrawable="@drawable/progress" />

现在在资源目录中创建可绘制对象。

<?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>
        <corners android:radius="5dip" />

        <gradient
            android:angle="270"
            android:centerColor="#ff5a5d5a"
            android:centerY="0.75"
            android:endColor="#ff747674"
            android:startColor="#ff5a5d5a" />
    </shape>
</item>
<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />


            <gradient
                android:angle="270"
                android:centerColor="#32cd32"
                android:centerY="0.75"
                android:endColor="#32cd32"
                android:startColor="#32cd32" />
        </shape>
    </clip>
</item>
<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners android:radius="5dip" />

            <gradient
                android:angle="270"
                android:endColor="#33B5E5"
                android:startColor="#33B5E5" />
        </shape>
    </clip>
</item>
</layer-list>

可以在这个可绘制对象中更改主要和次要指示器的颜色。

可以像这样在代码中使用它们:

TextProgressBar textProgress;
textProgress = (TextProgressBar)findViewById(R.id.progressBar1);
textProgress.setMax(100);
textProgress.setProgress(10); //
textProgress.setSecondaryProgress(50); //green

两个快速问题:android:id="@android:id/secondaryProgress",应该是android:id="@+id/secondaryProgress"吗?为什么要创建一个子类?你创建了一个私有字段,但没有使用它。 - Rogier van het Schip
请忽略第一个问题,我已经明白了:您需要从Android设置中设置id,以便让ProgressBar知道使用哪个形状。 - Rogier van het Schip

1
创建一个自定义布局并将两个进度条放入其中。然后,您需要通过获取其句柄来操作进度条。如果是用于通知,则必须将其设置为远程视图。

2
我不明白你的意思。 - user1324936

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接