我试图在android中绘制弧线。 在IOS中,用这种方法很容易做到这一点
[path addArcWithCenter: radius: startAngle: endAngle: clockwise:]
在android中,我有3个点(我的圆圈的中心,以及我想画两个点之间的弧线):
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之间绘制弧? 我试过(How to draw Arc between two points on the Canvas?):
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应该是什么?
谢谢,
答案 0 :(得分:1)
path.addArc将圆弧添加到路径的末尾。 Android顺时针绘制圆弧,因此当看一个圆 O 时,如果我的圆弧需要作为四分之一圆,则说它是从12点到3点的时钟,我需要RectF代表其中的正方形我可以画出弧线另外两个参数是startAngle和sweepAngle。 在我的示例中,startAngle是270(12点是270,3点是0,6点是90,而9点是180)。 slipAngle是弧的长度,在我的示例中为90。如果我想绘制一个半圆,则为180。
如果希望逆时针绘制,则需要将sweepAngle设置为负度。例如,从3点到12点的90度弧线,我需要将startAngle设置为90,并将sweepAngle设置为-90。
这篇很棒的文章教会了我这一切:https://www.cumulations.com/blogs/5/UnderstandingSweepangleindrawArcmethodofandroid
答案 1 :(得分:0)
第一个参数是定义弧形的形状和大小的椭圆边界 - 这里的代码绝对正确。 可能问题是在iOS中你必须使用弧度,但在Android中你必须使用度数。