キャンバスに 2 つの点があり、以下の画像のようにこれらの点の間に線を引くことができます。
このコードcanvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint);
下の画像のように2点間に円弧を描きたいです。
どうしたらこんな風に描けますか。
キャンバスに 2 つの点があり、以下の画像のようにこれらの点の間に線を引くことができます。
このコードcanvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint);
下の画像のように2点間に円弧を描きたいです。
どうしたらこんな風に描けますか。
最後に、このコードから解決策を得ました:
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
、円弧の描画を開始する場所を意味します。sweepAngle
2 つの線の間の角度を意味します。私の質問画像の青い点のような 2 つの点を使用して、それを計算する必要があります。
次のようにします。
//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);
}
簡単な解決策がここで 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)