4

我需要制作一个自定义水平进度条,如下图所示。

所需的自定义水平进度条

我使用可绘制的图层列表设计了如下图所示的进度条:

我的进度条

当进度大于 25 时,我想画一条垂直线,就像我需要的图像一样。我写了这段代码,但它没有用。

myProgressBar = (ProgressBar) findViewById(R.id.progress);
Canvas canvas = new Canvas();
Paint p = new Paint();
p.setStrokeWidth(2);
p.setColor(Color.WHITE);
canvas.drawLine(a, b, c, d, p);

if(myProgressBar.getProgress() > 25){
    myProgressBar.draw(canvas);
}

所以请帮我在进度条中画一条垂直线。这是我在堆栈溢出中的第一个问题,因此可能会有一些错误对此感到抱歉。

4

3 回答 3

1

您可以尝试使用图层列表

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:id="@android:id/background">
       <shape>
            <corners android:radius="3dip" />
            <gradient
                android:angle="0"
                android:endColor="#e9e9f4"
                android:startColor="#e9e9f4" />
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                    android:angle="0"
                    android:endColor="#16a023"
                    android:startColor="#16a023" />
            </shape>
        </clip>
    </item>
    <item android:id="@+id/line" >
        <rotate android:fromDegrees="90" android:pivotX="10%" >
           <shape android:shape="line" >
               <stroke android:width="2dp" android:color="#ffffff" />
           </shape>
       </rotate>
   </item>
</layer-list>
于 2016-05-10T20:30:07.353 回答
0

从我的角度来看,当它大于 25 时,你必须渲染那条线。试试这个,让我知道

if(myProgressBar.getProgress() > 25){
    canvas.drawLine(a, b, c, d, p);
    myProgressBar.draw(canvas);
}
于 2014-09-12T18:21:09.397 回答
0

问题很老了,但仍然出现在谷歌上。我不确定您是否希望垂直线高于或低于进度状态。阿里的回答使这条线出现在上面,我希望这条线出现在下面,所以这是我的 layer-list 版本:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <layer-list>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="@color/light_gray"/>
                    <corners
                        android:bottomRightRadius="10dp"
                        android:topRightRadius="10dp" />
                </shape>
            </item>
            <item>
                <rotate android:fromDegrees="90" android:pivotX="53%">
                    <shape android:shape="line" android:tint="@color/white">
                        <stroke android:width="1dp"/>
                    </shape>
                </rotate>
            </item>
        </layer-list>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <scale android:scaleWidth="100%">
                <shape android:shape="rectangle">
                    <solid android:color="@color/bright_teal"/>
                    <corners
                        android:bottomRightRadius="10dp"
                        android:topRightRadius="10dp" />
                </shape>
            </scale>
        </clip>
    </item>
</layer-list>

嵌套层列表中的第二项是您的垂直线。您可以根据需要放置尽可能多的垂直线,并通过更改android:pivotX值来设置它们的位置。

于 2019-08-02T09:23:59.193 回答