Я хочу создать округленный график, который отобразит диапазон значений из моего приложения. Значения можно отнести к 3 категориям: низкий, средний, высокий - представлены тремя цветами: синим, зеленым и красным (соответственно).
Над этим диапазоном я хочу показать фактически измеренные значения - в виде "большого пальца" над соответствующей частью диапазона:
Расположение белого большого пальца по дуге диапазона может изменяться в соответствии с измеренными значениями.
В настоящее время я могу нарисовать трехцветный диапазон, рисуя 3 дуги над одним и тем же центром, внутри метода viewDraw:
width = (float) getWidth();
height = (float) getHeight();
float radius;
if (width > height) {
radius = height / 3;
} else {
radius = width / 3;
}
paint.setAntiAlias(true);
paint.setStrokeWidth(arcLineWidth);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStyle(Paint.Style.STROKE);
center_x = width / 2;
center_y = height / 1.6f;
left = center_x - radius;
float top = center_y - radius;
right = center_x + radius;
float bottom = center_y + radius;
oval.set(left, top, right, bottom);
//blue arc
paint.setColor(colorLow);
canvas.drawArc(oval, 135, 55, false, paint);
//red arc
paint.setColor(colorHigh);
canvas.drawArc(oval, 350, 55, false, paint);
//green arc
paint.setColor(colorNormal);
canvas.drawArc(oval, 190, 160, false, paint);
И это результат дуги:
Мой вопрос: как я:
- Создайте плавный градиент между этими тремя цветами (я попытался использовать
SweepGradient
, но это не дало мне правильного результата). -
Создайте белый белый цвет, как показано на рисунке, чтобы я мог контролировать, где его отображать.
-
Анимировать этот белый большой палец над моей дугой диапазона.
Примечание: трехцветный диапазон статичен, поэтому другое решение может состоять в том, чтобы просто взять выталкиваемый и нарисовать белый большой палец над ним (и оживить его), поэтому я открыт, чтобы услышать такое решение:)