画布中弧形之间的空间

时间:2015-02-11 09:49:27

标签: android canvas android-canvas

目标是绘制一个具有表示时间切片的弧的圆。我这样做了:

enter image description here

问题是每个拱门之间有一个空白区域,我想删除它。而且,弧不对齐。这是我的代码:

    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);
    }

3 个答案:

答案 0 :(得分:1)

不是绘制彼此相邻的每个弧,而是可以绘制更大的弧,如图层绘制。

抱歉我的英文。

答案 1 :(得分:1)

这可能只是解决弧段之间差距的部分答案

这里是javascript的小提琴:http://jsfiddle.net/oakvLadb/

我只是随机生成一些开始和停止角度。

重要的部分在于绘制弧线:

ctx.arc(c.width/2,c.height/2,radius,startAngle,stopAngle+anglePadding);

anglePadding用于确保绘制一点额外的东西。当下一个片段从前一个片段的stopAngle开始绘制时,会有一个切口重叠,确保没有间隙可见。

接下来是弧段不合身

当谈到这些片段似乎没有正确相遇的事实时,我唯一能想到的是你所画的片段不是一个完美的圆圈而是一个椭圆形,这就是为什么它们没有正确相遇的原因。如果您的rect2变量没有保存完美正方形的数据,则您的细分不会匹配。

看起来你确实有一个完美的方形,所以它们应该对齐。在某个地方,有某种舍入错误...

答案 2 :(得分:0)

我通过将LayerType设置为LAYER_TYPE_SOFTWARE来解决此问题。如下。    setLayerType(View.LAYER_TYPE_SOFTWARE,null);