Я столкнулся с той же проблемой и не нашел подходящего решения для моего дела, поэтому решил пойти другим путем. Я создал пользовательский класс drawable. В этом классе я создал 2 Paints для линии прогресса и фоновой линии (с некоторым большим штрихом). Прежде всего установите startAngle и sweepAngle в конструкторе:
mSweepAngle = 0;
mStartAngle = 270;
Вот метод onDraw этого класса:
@Override
public void draw(Canvas canvas) {
// draw background line
canvas.drawArc(mRectF, 0, 360, false, mPaintBackground);
// draw progress line
canvas.drawArc(mRectF, mStartAngle, mSweepAngle, false, mPaintProgress);
}
Итак, теперь все, что вам нужно сделать, backgorund of view, в фоновом изменении потока sweepAngle:
mSweepAngle += 360 / totalTimerTime // this is mStep
и непосредственно вызывать InvalidateSelf () с некоторым интервалом (например, каждые 1 секунду или чаще, если вы хотите добиться плавного изменения хода) на представлении, которое сделайте это возможным в качестве фона. Вот оно!
P.S. Я знаю, я знаю ... конечно, вы хотите еще немного кода. Итак, вот весь поток:
<View
android:id="@+id/timer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
mPaintProgress = new Paint();
mPaintProgress.setAntiAlias(true);
mPaintProgress.setStyle(Paint.Style.STROKE);
mPaintProgress.setStrokeWidth(widthProgress);
mPaintProgress.setStrokeCap(Paint.Cap.ROUND);
mPaintProgress.setColor(colorThatYouWant);
То же самое для красок backgroung (установите ширину немного больше, если хотите)
public void update() {
mSweepAngle += mStep;
invalidateSelf();
}
OurSuperDrawableClass superDrawable = new OurSuperDrawableClass();
YourTimerView.setBackgroundDrawable(superDrawable);
YourTimerView.post(new Runnable() {
@Override
public void run() {
// update progress view
superDrawable.update();
}
});
Вот оно! Наслаждайтесь прохладным индикатором хода. Вот скриншот результата, если вам слишком скучно от этого количества текста. [/g0]