0

2 つの円弧を描き、最初の円弧を少し大きくして、境界のある円弧を描いています。

問題は、「少し大きい」と、境界線が常に均等になるとは限らないことです。

例

私が描いている両方の弧は同じ半径を持っています。単純に始点に 1 度、終点に 2 度を加えて大きくし (弧の両端の境界が等しくなるようにするために必要です)、ストロークの幅を広げます。

提供された写真では、太い境界線がまだ表示されている間に作成できる最小のエッジです。(内側の円弧から -1 度)

どちらかの端と 2 つの円弧に対して 2 つの直線を 4 つの別々の呼び出しで円弧の輪郭を描画することを検討しました。これは、私が達成したいことに対して非常に非効率的です。

可能であれば、描画/キャンバスの回転呼び出しの数を最小限に抑えて、境界線を均​​等に描画する方法について何か提案があるかどうか疑問に思っています。

現在のソリューションに関連するコード サンプル:

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

1 に答える 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);
于 2013-01-10T16:09:52.757 に答える