Android Path在画布上如何在两点之间添加弧线

3

我想在Android中绘制一个弧线。 在iOS中,使用这种方法非常容易实现。

[path addArcWithCenter: radius: startAngle: endAngle: clockwise:]

在Android中,我有三个点(我的圆心和我想要在它们之间绘制弧线的两个点):
Point center = new Point(..., ...);
Point p1 = new Point(..., ...);
Point p2 = new Point(..., ...);

int radius = (int) Math.sqrt(Math.pow(p1.x - center.x, 2) + Math.pow(p1.y - center.y, 2));

但是我该如何使用Path.addArc方法在p1和p2之间绘制弧形?我已经按照(如何在画布上绘制两点之间的弧形?)中的指示尝试过:

RectF oval = new RectF();
oval.set(p2.x - radius, p2.y - radius, p2.x + radius, p2.y + radius);
path.addArc(oval, startAngle, endAngle - startAngle);
// startAngle : angle between horizontal axis and p1 point
// endAngle : angle between horizontal axis and p2 point

但实际上它没有绘出预期的弧形。我不明白addArc方法的第一个参数是什么!RectF应该是什么?

谢谢!

2个回答

8

path.addArc将一个弧形添加到路径的末尾。Android按顺时针方向绘制弧形,因此在查看圆形O时,如果我的弧形需要为四分之一圆形,例如从12点钟到3点钟,我需要使用RectF来表示内部正方形,以便我可以在其中绘制我的弧形。另外两个参数是startAngle和sweepAngle。 在我的示例中,startAngle为270(12点钟为270,3点钟为0,6点钟为90,9点钟为180)。 sweepAngle是您的弧形长度,在我的示例中为90。如果我想绘制半圆,则为180。

如果您希望逆时针绘制,则需要将sweepAngle设置为负度数。例如,从3点钟到12点钟的90度弧形,我需要将startAngle设置为90,将sweepAngle设置为-90。

这篇文章教会了我所有这些知识,链接在这里:https://www.cumulations.com/blog/understanding-sweep-angle-in-drawarc-method-of-android/


1
链接应更新为https://www.cumulations.com/blog/understanding-sweep-angle-in-drawarc-method-of-android/。 - Yugy

0

第一个参数是椭圆形边界,定义了弧形的形状和大小 - 在这里您的代码绝对正确。也许问题在于,在iOS中必须使用弧度,而在Android中必须使用角度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接