Хочу сделать ProgressBar
который состоит из 5-ти звезд. Фон у этих звезд серый и при увеличении прогресса эти звезды должны заполнятся золотым цветом. Пока что у меня получилось просто отрисовать 5 звезд одного цвета.
Сейчас код выглядит так:
public class StartView extends ViewGroup {
private int progress = 0;
private Paint paint = new Paint();
private Path path = new Path();
public StartView(Context context) {
super(context);
init();
}
public StartView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public StartView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public void init() {
paint.setColor(Color.WHITE);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
@Override
protected void onDraw(Canvas canvas) {
float mid = getWidth() / 2;
float min = Math.min(getWidth(), getHeight());
float fat = min / 17;
float half = min / 2;
float margin = half/2;
mid = mid - half;
float left = mid - (half+margin);
float start = left - (half+margin);
float right = mid +(half+margin);
float end = right + (half+margin);
//mid
drawStart(canvas,fat,mid,half);
//to left mid
drawStart(canvas,fat,left,half);
drawStart(canvas,fat,start,half);
//to right mid
drawStart(canvas,fat,right,half);
drawStart(canvas,fat,end,half);
super.onDraw(canvas);
}
private void drawStart(Canvas canvas, float fat, float mid , float half){
paint.setStrokeWidth(fat);
paint.setStyle(Paint.Style.FILL);
paint.setColor(ContextCompat.getColor(getContext(),R.color.hintIconColorCommon));
// top left
path.moveTo(mid + half * 0.5f, half * 0.84f);
// top right
path.lineTo(mid + half * 1.5f, half * 0.84f);
// bottom left
path.lineTo(mid + half * 0.68f, half * 1.45f);
// top tip
path.lineTo(mid + half * 1.0f, half * 0.5f);
// bottom right
path.lineTo(mid + half * 1.32f, half * 1.45f);
// top left
path.lineTo(mid + half * 0.5f, half * 0.84f);
path.close();
canvas.drawPath(path, paint);
}
}
и результат вот такой:
Вот пример того что мне нужно получить:
У меня есть предположение что можно просто отрисовать прогресс (золотого цвета) как прямоугольник, а сверху него прозрачные звезды,думаю надо копать куда то в сторону масок, но это не точно.
Вобщем вопрос состоит в том, как можно реализовать нужный мне функционал?
Серый фон, поверх него ProgressBar золотого цвета, поверх него SVG изображение белого цвета с вырезами под звезды. Всё это во FrameLayout
(Про него можно почитать тут).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вопрос, хочу добавитьjar библиотеку к maven проекту, чтобы потом jenkins собирался нормально
Как можно проверить, содержит ли словарь map1 все пары <Key, Value>, содержащиеся в map2?
Вот сделал имплементацию дагера и вроде как все работет, вот только context переменная не хочет инжектиться
Подскажите пожалуйста, как переписать фрагмент кода, используя вместо итератора цикл: