Android 向进度条添加垂直线

Android 向进度条添加垂直线,android,android-layout,charts,android-drawable,android-progressbar,Android,Android Layout,Charts,Android Drawable,Android Progressbar,我有一个ProgressBar,它工作得很好。我使用了以下布局: <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:id="@+id/scoreboard_rank_progress_bar" android:layout_width="match_parent" android:layout_height="20dp" android:layout_marginTop

我有一个ProgressBar,它工作得很好。我使用了以下布局:

<ProgressBar style="?android:attr/progressBarStyleHorizontal"
    android:id="@+id/scoreboard_rank_progress_bar"
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:layout_marginTop="6dp"
    android:indeterminate="false"
    android:layout_gravity="center_horizontal"
    android:progressDrawable="@drawable/progress_bar" />

不幸的是,这不起作用,因为我正在使用活动,无法访问画布。我还可以如何添加垂直线?理想情况下,我希望在代码中这样做,这样我可以在运行时对其进行更改,但如果仅在布局中可行,我也会这样做。

您需要扩展
ProgressBar
类并覆盖
onDraw()
方法,该方法将为您提供绘制画布。然后您可以进行绘制逻辑,例如:

类MyProgressBar扩展了ProgressBar{
...
@凌驾
公共空白onDraw(画布){
油漆线条油漆=新油漆();
setColor(getResources().getColor(android.R.color.black));
最终浮动线宽=5f;
linePaint.设置行程宽度(线宽);
画布.抽绳(getWidth()*m100/100,0,
getWidth()*m100/100,getHeight(),
线条漆);
}
}
最后,将添加到XML文件中的
ProgressBar
替换为自定义的
MyProgressBar


其他改进:将绘制初始化移到绘图方法之外,这样就不会在每次调用
onDraw()
时重新初始化同一对象。对
线宽执行相同操作

您应该在自定义视图中使用该代码:非常感谢。我希望自定义进度条的外观与添加到XML文件中的进度条完全相同。您知道MyProgressBar类应该是什么样子的吗?这样它就完全相同了(除了onDraw方法之外)?只需在XML中使用具有相同属性的自定义进度条即可。所以不是
Paint linePaint = new Paint();
linePaint.setColor(getResources().getColor(android.R.color.black));
final float lineWidth = 5f;
linePaint.setStrokeWidth(lineWidth);
canvas.drawLine(getWidth() * m100 / 100, 0, 
                getWidth() * m100 / 100, getHeight(), 
                linePaint);