我正在画一个圆,我想要在圆线上以正确的角度旋转矩形。就像这张图片一样:
在 SO 上某人的帮助下,我找到了一种方法(几乎)。
我有这个:
正如您所见,缺少两件事:
1) 它们不在圆线上 2)它们没有旋转
我知道如何在 Android 中的 Canvas 上旋转,但它们都混淆了。
这是我的代码:
int r = 200;
canvas.save();
mPaint.setStyle(Paint.Style.STROKE);
canvas.translate(rect.width() / 2, rect.height() / 2);
canvas.drawCircle(0, 0, r, mPaint);
mPaint.setStyle(Paint.Style.FILL);
for (int alpha = 0; alpha <= 360; alpha += 20) {
double x = r/3 * Math.cos(Math.toRadians(alpha));
double y = r/3 * Math.sin(Math.toRadians(alpha));
canvas.translate((float)x, (float)y);
canvas.drawRect(0, 0, 70, 20, mPaint);
}
canvas.restore();
有人可以指出我做错了什么吗?为什么它们没有显示在圆线上?其次是如何旋转,因为当我执行 canvas.rotate(alpha) 时,它们不再是一个圆圈。
编辑:
我的代码现在是这样的:
int r = 200;
canvas.save();
mPaint.setStyle(Paint.Style.STROKE);
canvas.translate(rect.width() / 2, rect.height() / 2);
canvas.drawCircle(0, 0, r, mPaint);
mPaint.setStyle(Paint.Style.FILL);
for (int alpha = 0; alpha <= 360; alpha += 20) {
double x = r * Math.cos(Math.toRadians(alpha));
double y = r * Math.sin(Math.toRadians(alpha));
canvas.rotate(20.f);
canvas.drawRect(0, 0, 70, 20, mPaint);
}
canvas.restore();
它给了我这个:
编辑2:
代码如下:
int r = 200;
canvas.save();
mPaint.setStyle(Paint.Style.STROKE);
canvas.translate(rect.width() / 2, rect.height() / 2);
canvas.drawCircle(0, 0, r, mPaint);
mPaint.setStyle(Paint.Style.FILL);
for (int alpha = 0; alpha <= 360; alpha += 20) {
double x = r * Math.cos(Math.toRadians(alpha));
double y = r * Math.sin(Math.toRadians(alpha));
canvas.rotate(20.f);
canvas.save();
canvas.translate(0, -200);
canvas.drawRect(0, 0, 70, 20, mPaint);
canvas.restore();
}
canvas.restore();
结果:
最佳答案
通过翻译进行轮换听起来像是一项不可能完成的任务。笔直绘制矩形并使用 Canvas.rotate()
旋转 Canvas
。
参见:Canvas API
关于android - 在android中的 Canvas 上的圆线上绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25565499/