android - 在android中的 Canvas 上的圆线上绘制矩形

标签 android math canvas android-canvas

我正在画一个圆,我想要在圆线上以正确的角度旋转矩形。就像这张图片一样:

enter image description here

在 SO 上某人的帮助下,我找到了一种方法(几乎)。

我有这个:

enter image description here

正如您所见,缺少两件事:

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();

它给了我这个:

enter image description here

编辑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();

结果:

enter image description here

最佳答案

通过翻译进行轮换听起来像是一项不可能完成的任务。笔直绘制矩形并使用 Canvas.rotate() 旋转 Canvas

参见:Canvas API

关于android - 在android中的 Canvas 上的圆线上绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25565499/

相关文章:

javascript - 按下下载按钮时下载带有背景图像的整个 Canvas

android - SQLITE 每月使用 SUM 查询 GROUP BY

android - addToBackStack 后的 popBackStack() 不起作用

c# - Xamarin.Forms 不可点击的 ListView(移除选择涟漪效应)

Javascript将小数幂转换为常规小数

c++ - 不需要的舍入 C++

javascript - 如何隐藏 visjs 图中边缘的标签?

java - 处理一个事件 : implement an interface or using inner class to handle the interface. 哪个更好

math - 逆阶乘的增长

eclipse - 三星 Galaxy S4 和 Phonegap 问题