49

キャンバスに 2 つの点があり、以下の画像のようにこれらの点の間に線を引くことができます。

このコードcanvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint); ここに画像の説明を入力

下の画像のように2点間に円弧を描きたいです。

ここに画像の説明を入力

どうしたらこんな風に描けますか。

4

7 に答える 7

50

最後に、このコードから解決策を得ました:

float radius = 20;
final RectF oval = new RectF();
oval.set(point1.x - radius, point1.y - radius, point1.x + radius, point1.y+ radius);
Path myPath = new Path();
myPath.arcTo(oval, startAngle, -(float) sweepAngle, true);

を計算するstartAngleには、次のコードを使用します。

int startAngle = (int) (180 / Math.PI * Math.atan2(point.y - point1.y, point.x - point1.x));

ここでpoint1、円弧の描画を開始する場所を意味します。sweepAngle2 つの線の間の角度を意味します。私の質問画像の青い点のような 2 つの点を使用して、それを計算する必要があります。

于 2012-06-23T09:26:54.453 に答える
20

次のようにします。

//Initialized paint on a class level object.
Paint p = new Paint();
p.setColor(Color.BLACK);
//Calculate the rect / bounds of oval
RectF rectF = new RectF(50, 20, 100, 80);

@Override
protected void onDraw(Canvas canvas) {      
    //Do the drawing in onDraw() method of View.
    canvas.drawArc (rectF, 90, 45, false, p);
}
于 2012-06-21T05:36:08.957 に答える
0

簡単な解決策がここで Langkiller によって提案されました。これにより、始点から制御点を経由して終点までの 3 次線が描画されます。

Path path = new Path();
float startX = 0;
float startY = 2;
float controlX = 2;
float controlY = 4;
float endX = 4
float endY = 2
conePath.cubicTo(startX, startY, controlX, controlY,endX, endY);

Paint paint = new Paint();
paint.setARGB(200, 62, 90, 177);
paint.setStyle(Paint.Style.FILL);

canvas.drawPath(path, paint)
于 2018-08-08T08:22:55.020 に答える