Я хочу создать собственный SeekBar со следующим текстом, который обновляет свою позицию (и прогресс) в зависимости от того, где находится большой палец.
Что мне нужно сделать:
Предположения:
- Минимальное значение = 1000
- Максимальное значение = 30000
Случай 1. Ход выполнения составляет 0 % (или минимальное значение = 1000), а текст должен быть выровнен по левой границе бегунка.
Случай 2: текст выполнения отображается над возможностью рисования Thumb и центрируется, так как у него есть место для рисования.
Вариант 3: прогресс составляет 100 % (или максимальное значение = 3000), и текст должен быть выровнен по правой границе Thumb.
Что у меня уже есть:
public class CustomSeekBar extends SeekBar {
private Paint paint;
private int[] coordCenterTemp = new int[]{0, 0};
// .....
private void init() {
paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setTextSize(sp2px(20));
paint.setTextAlign(Paint.Align.CENTER);
}
private int sp2px(int sp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, getResources().getDisplayMetrics());
}
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
String str = String.valueOf(getProgress());
int thumb_x = (int) (( (double)this.getProgress()/this.getMax() ) * (double)(this.getWidth()));
int thumb_y = 30;
int textMeasure = (int) paint.measureText(str, 0, str.length());
if ((textMeasure / 2) + thumb_x <= getRight()) {
coordCenterTemp[0] = thumb_x;
coordCenterTemp[1] = thumb_y;
}
canvas.drawText(str, coordCenterTemp[0], coordCenterTemp[1], paint);
}
}
Это работает, когда прогресс составляет 50%. Как только я двигаюсь вправо или влево, текст рисуется с некоторым смещением в неправильном направлении.
Как я могу это сделать?