English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Android реализует环形Progress для шагомера

В проекте необходимо реализовать环形Progress для отслеживания шагов, при этом, если не достигнута установленная цель, рисуется дуга с определенным углом (угол, равный (сделанные шаги / целевые шаги) * 360°). Если достигнуты целевые шаги, рисуется весь круг 360°.

Результат изображения:

Реализация кода:

Настройка завершенных шагов и целевых шагов:

  public void setStep(int stepDone, int stepGoal) {
    this.stepDone = stepDone;
    this.stepGoal = stepGoal;
    int progess = (stepDone * 100) / stepGoal;
    if (progess > 100) {
      setProgress(100);
    } else {
      setProgress(progess);
    }
  }

Настройка прогресса:

  public void setProgress(int progress) {
    this.mProgress = progress;
    this.invalidate();
  }

Настройка свойств кисти:

mPaint.setAntiAlias(true);
mPaint.setColor(Color.rgb(0xe9, 0xe9, 0xe9));
canvas.drawColor(Color.TRANSPARENT);
mPaint.setStrokeWidth(LINE_WIDTH_BG);
mPaint.setStyle(Paint.Style.STROKE);

Нарисовать кольцо и фон:

canvas.drawArc(mRectF, -90, 360, false, mPaint);
mPaint.setColor(Color.rgb(0xf8, 0x60, 0x30));
canvas.drawArc(mRectF, -90, ((float) mProgress / mMaxProgress) * 360, false, mPaint);

Нарисовать шаги и единицы измерения:

mPaint.setStrokeWidth(TEXT_WIDTH);
    String text = stepDone + context.getString(R.string.step_unit);
    int textHeight = height / 4;
    mPaint.setTextSize(textHeight);
    int textWidth = (int) mPaint.measureText(text, 0, text.length());
    mPaint.setStyle(Paint.Style.FILL);
    canvas.drawText(text, width / 2 - textWidth / 2, height / 2 + textHeight / 4, mPaint);

Нарисовать целевую шагу:

 String textGoal = "/" + stepGoal;
    int textGoalHeight = height / 8;
    mPaint.setTextSize(textGoalHeight);
    int textGoalWidth = (int) mPaint.measureText(textGoal, 0, textGoal.length());
    mPaint.setStyle(Paint.Style.FILL);
    canvas.drawText(textGoal, width / 2 - textGoalWidth / 2, height / 2 + textHeight / 2
        + textGoalHeight, mPaint);

Это конец статьи, надеюсь, она поможет вам в изучении. Также希望大家多多支持呐喊教程。

Декларация: содержимое статьи предоставлено из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета в качестве добровольного вклада и загружен самостоятельно, сайт не обладает правами собственности, не был отредактирован вручную и не несет ответственности за связанные с этим юридические обязательства. Если вы обнаружите контент,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для подачи жалобы,并提供 соответствующие доказательства. При подтверждении факта нарушения авторских прав сайт незамедлительно удаляет涉嫌侵权的内容.

Вам может понравиться