根据歌曲持续时间公式绘制每件弧形片不起作用

时间:2014-09-02 12:01:09

标签: android math

我有一个数字,其中弧线在顶部,具有不透明度。我想根据一首歌一次画出我的弧形时间。

我的椭圆形是这样的:

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 个答案:

答案 0 :(得分:2)

我做了类似的事情但是进步对话(同样的原则)

  //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 project link

<强>输出:

enter image description here

答案 1 :(得分:0)

我发现了问题。问题是我将它分配给一个int。这就是为什么它总是给我的原因。

这就是你解决它的方法:

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

你需要一个双倍然后做一个细胞。