Я пытаюсь создать индикатор выполнения ar c, который следует разделить на 5 равных частей с дефисами между ними. Я могу заставить работать круглый индикатор выполнения ar c, но не понимаю, как рисовать тире между ними. Любая помощь приветствуется.
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
rectF.set(strokeWidth / 2f, strokeWidth / 2f, width - strokeWidth / 2f, MeasureSpec.getSize(heightMeasureSpec) - strokeWidth / 2f);
float radius = width / 2f;
float angle = (360 - arcAngle) / 2f;
arcBottomHeight = radius * (float) (1 - Math.cos(angle / 180 * Math.PI));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
float startAngle = 90;
float finishedSweepAngle = progress / (float) getMax() * arcAngle;
float finishedStartAngle = startAngle;
if(progress == 0) finishedStartAngle = 0.01f;
paint.setColor(unfinishedStrokeColor);
canvas.drawArc(rectF, startAngle, arcAngle, false, paint);
paint.setColor(finishedStrokeColor);
canvas.drawArc(rectF, finishedStartAngle, finishedSweepAngle, false, paint);
// This is where I think I should add code for the dashes but its not working.
// dividerPaint.setColor(Color.RED);
// dividerPaint.setStrokeWidth(10);
// float startX = 100;
// float startY = 100;
// float lineRadius = 150;
// float lineAngle = (float) ((startAngle + finishedSweepAngle / 4) * Math.PI / 180);
// float stopX = (float) (startX + lineRadius * Math.cos(lineAngle));
// float stopY = (float) (startY + lineRadius * Math.sin(lineAngle));
//
// canvas.drawLine(startX, startY, stopX, stopY, dividerPaint);
if(text == null){
text = String.valueOf(getProgress());
}
if (!TextUtils.isEmpty(text)) {
textPaint.setColor(textColor);
textPaint.setTextSize(textSize);
float textHeight = textPaint.descent() + textPaint.ascent();
float textBaseline = (getHeight() - textHeight) / 2.0f;
canvas.drawText(text, (getWidth() - textPaint.measureText(text)) / 2.0f, textBaseline, textPaint);
textPaint.setTextSize(suffixTextSize);
float suffixHeight = textPaint.descent() + textPaint.ascent();
canvas.drawText(suffixText, getWidth() / 2.0f + textPaint.measureText(text) + suffixTextPadding, textBaseline + textHeight - suffixHeight, textPaint);
}
if(arcBottomHeight == 0) {
float radius = getWidth() / 2f;
float angle = (360 - arcAngle) / 2f;
arcBottomHeight = radius * (float) (1 - Math.cos(angle / 180 * Math.PI));
}
if (!TextUtils.isEmpty(getBottomText())) {
textPaint.setTextSize(bottomTextSize);
float bottomTextBaseline = getHeight() - arcBottomHeight - (textPaint.descent() + textPaint.ascent()) / 2;
canvas.drawText(getBottomText(), (getWidth() - textPaint.measureText(getBottomText())) / 2.0f, bottomTextBaseline, textPaint);
}
}
Текущее
Ожидаемое