首页 文章

Android Canvas Paint Arc Border

提问于
浏览
0

我通过绘制两个弧形绘制带边框的弧形,一个在另一个上面,第一个稍微大一些 .

问题是“略大”,这可能最终导致边界并不总是一直都是这样 .

Example

我绘制的两个弧都具有相同的半径,我只是通过在开始处添加一个度数和向末端增加两度来确保它更大(确保弧的任一端的边界相等所必需的)并增加笔划宽度 .

在提供的图片中,较厚的边框边缘是我可以在它仍然可见时最小的边缘 . (内弧-1度)

我考虑用四个单独的调用绘制弧形轮廓两条直线用于任一端和两个弧 . 对于我想要实现的目标而言,这似乎效率很低 .

我想知道是否有人有任何关于如何绘制边框的建议,如果可能的话,最小化绘制/画布旋转调用的数量 .

当前解决方案的相关代码示例:

Paint mOutlinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint mFillPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mFillPaint.setStyle(Style.STROKE);
mFillPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
mFillPaint.setColor(Color.TRANSPARENT);
mFillPaint.setStrokeWidth(mValueWidth);

mOutlinePaint.setStyle(Style.STROKE);
mOutlinePaint.setStrokeWidth(mBorderWidth);
mOutlinePaint.setColor(Color.WHITE);

mRect.set(mHalfXSubRadius, mHalfYSubRadius, mHalfXAddRadius, mHalfYAddRadius);
canvas.drawArc(mRect, ARC_START-1, MAX_ARC+2, false, mOutlinePaint);
canvas.drawArc(mRect, ARC_START, MAX_ARC, false, mFillPaint);

1 回答

  • 0

    你不应该让你的弧更大,而是尝试绘制相同大小的弧(白色),X像素右,下,上,左,角(总共8个图纸) .

    其中X是你想要的边框大小 .

    之后绘制中间的主弧(灰色) .

    伪代码:

    paint=white;
    drawArc(x,y+2);
    drawArc(x,y-2);
    drawArc(x+2,y+2);
    drawArc(x+2,y-2);
    drawArc(x-2,y+2);
    drawArc(x-2,y+2);
    drawArc(x+2,y);
    drawArc(x-2,y);
    
    paint=gray;
    drawArc(x,y);
    

相关问题