Raj*_*ddy 46 android ondraw android-canvas
我在画布上有两个点,现在我可以通过使用在这些点之间绘制一条线,如下图所示
这段代码 canvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint);

我想画两点之间的弧线,如下图所示.

我怎么画这样的.
Raj*_*ddy 47
最后我从这段代码中得到了解决方案:
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);
Run Code Online (Sandbox Code Playgroud)
要计算startAngle,请使用以下代码:
int startAngle = (int) (180 / Math.PI * Math.atan2(point.y - point1.y, point.x - point1.x));
Run Code Online (Sandbox Code Playgroud)
在这里,point1表示您要开始绘制Arc的位置.sweepAngle表示两条线之间的角度.我们必须通过使用像我的问题图像中的蓝点这样的两个点来计算.
Adi*_*mro 19
做这样的事情:
@Override
protected void onDraw(Canvas canvas) {
Paint p = new Paint();
RectF rectF = new RectF(50, 20, 100, 80);
p.setColor(Color.BLACK);
canvas.drawArc (rectF, 90, 45, true, p);
}
Run Code Online (Sandbox Code Playgroud)
首先我们需要可视化坐标在起始和扫掠角方面的情况,然后它会变得更加清晰。
所以如果你只想要圆的顶部,我们可以这样做:
val rect = RectF(0f, 0f, 500f, 300f)
val paint = Paint()
paint.apply {
strokeWidth = 5f
setStyle(Paint.Style.STROKE)
color = COLOR.BLUE
}
path.addArc(rect, 270f, 90f)
Run Code Online (Sandbox Code Playgroud)
..
这从 270 开始(根据上图,向前“扫掠”90 度。然后你就有了这个形状:
让我们再创建一个,以便您掌握它的窍门。这次让我们使用负值:我们要从右侧开始创建一个半月形(圆弧):
path.addArc(rect, 0f, -180f)
Run Code Online (Sandbox Code Playgroud)
在这里,我们从 0 开始并“扫过”-180 度。结果是:
| 归档时间: |
|
| 查看次数: |
66058 次 |
| 最近记录: |