我们的目标是画一个圆,圆上有代表时间片的弧线。
问题是每个弧之间都有一白色,我想删除它。而且,弧没有对齐。这是我的代码:
int x = getWidth()/2;
int y = getHeight()/2;
int stroke = 20;
int radiusExternal = 250;
final RectF rect2 = new RectF();
rect2.set(x - radiusExternal, y - radiusExternal, x + radiusExternal, y + radiusExternal);
for (int i = 0; i < modProgram.getListEvents().size(); i++) {
ModEvent event = modProgram.getListEvents().get(i);
Paint paint2 = new Paint();
paint2.setColor(getColorEvent(event));
paint2.setStrokeWidth(stroke);
paint2.setAntiAlias(true);
paint2.setStrokeCap(Paint.Cap.BUTT);
paint2.setStyle(Paint.Style.STROKE);
int initialAngle = getInitialAngle(modProgram, event.getStartEvent());
int sweepAngle = getSweepAngle(modProgram, event, initialAngle);
canvas.drawArc(rect2, initialAngle, sweepAngle, false, paint2);
}
4条答案
按热度按时间8ljdwjyq1#
这可能只是处理弧段之间差距部分答案。
下面是对javascript的一点小改动:http://jsfiddle.net/oakvLadb/
我只是随机生成了一些起始角和终止角。
重要的部分在于画圆弧:
anglePadding用于确保绘制了一些额外的内容。当从上一个片段的stopAngle开始绘制下一个片段时,将有一个狭缝重叠,以确保没有可见的间隙。
其次是弧段拟合不良
当谈到线段似乎没有正确相交的事实时,我唯一能想到的是,你画的线段不是一个正圆,而是一个椭圆,这就是为什么它们没有正确相交的原因。如果你的
rect2
变量没有保存正方形的数据,你的线段就不会匹配。看起来你确实有一个完美的正方形,所以它们应该对齐。在某个地方,有某种舍入误差...
9lowa7mx2#
您可以像图层绘制一样绘制更大的弧,而不是相邻绘制每个弧。
抱歉,我的英语。
zujrkrfu3#
我通过将图层类型设置为图层类型软件来解决这个问题。如下所示。setLayerType(View.LAYER_TYPE_SOFTWARE,null);
oyt4ldly4#