Canvas 中两点之间的Android Path addArc

标签 android path android-canvas ondraw

我正在尝试在 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/

相关文章:

Android VR工具包-HeadTransform getHeadView矩阵表示

javascript - 如何使用 Javascript 检测路径之间的交叉点

android - 在 Canvas 上绘制一个以触摸点为中心的矩形

java - Android firebase getValue() 不工作

android - 已安装应用程序但图标未出现在启动器屏幕或应用程序列表中

java - 是否可以抽象出 XML 代码的重复部分?

java - 无法通过相对路径检索图像

objective-c - 沿圆弧变换路径

java - Android App - 如何将 Canvas 上的位图绘图保存为图像?检查代码?

java - 在Android Kotlin上使用 Canvas mask 输入的文本