我正在尝试在 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 应该是什么?
谢谢,
最佳答案
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/
关于 Canvas 中两点之间的Android Path addArc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35413742/