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

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

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

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.