Нарисовать дуговую фигуру на кусок по формулам продолжительности песни не работает

У меня есть фигура, где дуга сверху с легкой непрозрачностью. Я хочу нарисовать свое духовое время за раз, основываясь на песне.

Мой овал выглядит так:

private void drawTimeArc(int angle, int position) {
 Log.d(TAG,"DrawTimeArc " + angle + " " + position);
 Paint p = new Paint();
 p.setAntiAlias(true);
 p.setStyle(Paint.Style.STROKE);
 p.setStrokeWidth(200);
 p.setColor(Color.BLACK);
 p.setAlpha(10);

 RectF rectF = new RectF(100, 100, 500, 500);

 mCanvas.drawArc(rectF, position, angle, false, p);

 drawingImageView.invalidate();
}

Угол - это угол, который я использую для добавления, и позиция - это позиция, из которой можно рисовать. Исходное положение - 270, потому что это 90 градусов. Почему 270, потому что drawArc рисует по часовой стрелке.

Мой расчет, чтобы рисовать каждую секунду:

long duration = TimeUnit.MILLISECONDS.toSeconds(mPlayer.getDuration());
 drawTimeArc((int)(360/duration), position);
 position += 360/duration;

Здесь mPlayer - MediaPlayer.

Я думал, что круг 360 градусов, поэтому 360/продолжительность дает вам угол, который вы хотите добавить каждую секунду. Позиция начинается с 270 и добавляется, поэтому она сдвигается.

Проблема в том, что моя песня закончена, а мой круг немного больше половины. Таким образом, он составляет только + 183 градуса.

Может кто-то настроить мою формулу? Потому что он должен работать с каждой песней. Так что 360 * 2 не является решением.

2 ответа

Я нашел проблему. Проблема в том, что я назначаю его int. Поэтому, почему это всегда давало мне 1.

Вот как вы его решаете:

****** duration = TimeUnit.MILLISECONDS.toSeconds(mPlayer.getDuration());
 int angle = (int) Math.ceil(360/duration);
 drawTimeArc(angle, position);
 position += angle;

Вам нужен двойной, а затем сделать потолок.


Я сделал что-то подобное, но для диалога прогресса (тот же принцип)

//Draw arc (progressbar)
 Paint paint = new Paint();
 paint.setAntiAlias(true);
 paint.setFlags(Paint.ANTI_ALIAS_FLAG);
 paint.setStyle(Paint.Style.STROKE);
 paint.setStrokeWidth(18);
 paint.setColor(Color.parseColor(arcColor));
 RectF rectF = new RectF(screenWidth/2-100, screenHeight/2-100, screenWidth/2+100, screenHeight/2+100);
 canvas.drawArc(rectF, -90, arcDrawValue, false, paint);

Проект Github: ссылка проекта Github

Вывод:

licensed under cc by-sa 3.0 with attribution.