我有一个数字,其中弧线在顶部,具有不透明度。我想根据一首歌一次画出我的弧形时间。
我的椭圆形是这样的:
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不是一个解决方案。
答案 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
<强>输出:强>
答案 1 :(得分:0)
我发现了问题。问题是我将它分配给一个int。这就是为什么它总是给我的原因。
这就是你解决它的方法:
double duration = TimeUnit.MILLISECONDS.toSeconds(mPlayer.getDuration());
int angle = (int) Math.ceil(360/duration);
drawTimeArc(angle, position);
position += angle;
你需要一个双倍然后做一个细胞。