向 ProgressBar 添加垂直线
Adding vertical line to 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" />
现在,我想添加红色垂直线,例如在条形图的 25% 和 65% 处(从左起)。我发现了以下 approach:
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);
不幸的是,这不起作用,因为我使用的是 Activity,无法访问 canvas。我还能如何添加垂直线?理想情况下,我想在代码中执行此操作,以便我可以在运行时更改它,但如果它只能在布局中进行,我也会这样做。
您需要扩展 ProgressBar
class 并重写 onDraw()
方法,这将为您提供 canvas 以供借鉴。然后你可以做你的绘画逻辑,例如:
class MyProgressBar extends ProgressBar {
...
@Override
public void onDraw(Canvas canvas) {
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);
}
}
最后,将添加到 XML 文件的 ProgressBar
替换为您自定义的 MyProgressBar
。
其他改进:将绘画初始化移到绘图方法之外,这样您就不会在每次 onDraw()
调用时都重新初始化同一个对象。对 lineWidth
.
做同样的事情
我有一个进度条,效果很好。我使用了以下布局:
<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" />
现在,我想添加红色垂直线,例如在条形图的 25% 和 65% 处(从左起)。我发现了以下 approach:
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);
不幸的是,这不起作用,因为我使用的是 Activity,无法访问 canvas。我还能如何添加垂直线?理想情况下,我想在代码中执行此操作,以便我可以在运行时更改它,但如果它只能在布局中进行,我也会这样做。
您需要扩展 ProgressBar
class 并重写 onDraw()
方法,这将为您提供 canvas 以供借鉴。然后你可以做你的绘画逻辑,例如:
class MyProgressBar extends ProgressBar {
...
@Override
public void onDraw(Canvas canvas) {
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);
}
}
最后,将添加到 XML 文件的 ProgressBar
替换为您自定义的 MyProgressBar
。
其他改进:将绘画初始化移到绘图方法之外,这样您就不会在每次 onDraw()
调用时都重新初始化同一个对象。对 lineWidth
.