Я хочу создать пользовательский SeekBar со следующим текстом, который обновляет его положение (и прогресс) в соответствии с расположением большого пальца.Android - Seekbar с текстом
Что необходимо для достижения:
Предположения:
- Минимальное значение = 1000
- Максимальное значение = 30000
Дело 1: Прогресс на 0% (или минимальное значение = 1000), и текст должен совпадать с левой границей большого пальца.
Корпус 2: Текст прогресса отображается над Thumb drawable и centered, так как в нем есть место для рисования.
Случай 3: Прогресс на 100% (или максимальное значение = 3000) и текст должен выравнивать по правому краю эмпирическое.
Что у меня уже есть:
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%. Как только я сдвигаюсь вправо или влево, текст нарисован с некоторым смещением в неправильном направлении.
Как это сделать?
он нуждается в некоторых ухищрений, но это отличный пример того, как это сделать! Благодаря! – Bugdr0id