【问题标题】:Canvas Rotation画布旋转
【发布时间】:2014-02-01 05:43:49
【问题描述】:

有人能解释一下画布围绕一个点的旋转是如何工作的吗?

我有线条,我想绘制与每一行平行的文本。我已经计算出计算线的角度及其中心点所需的三角函数。

当我尝试围绕线的起点旋转画布,然后绘制文本并恢复时,我总是得到奇怪的偏移量,这显然意味着我不知道旋转是如何工作的......

有人能解释一下当你围绕一个点旋转画布时会发生什么,以及坐标 X、Y 上的绘图如何转换回来吗?

【问题讨论】:

  • 请在帖子中包含您的代码。

标签: android canvas rotation


【解决方案1】:

请参阅以下课程:

class V extends View {

    private Paint mPaint;

    public V(Context context) {
        super(context);
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setColor(0xffeeeeee);
        mPaint.setTextSize(24);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        float x = 100;
        float y = 50;
        float dx = 60;
        float dy = 40;
        canvas.drawLine(x, y, x + dx, y + dy, mPaint);
        canvas.save();
        float degrees = (float) (180 * Math.atan2(dy, dx) / Math.PI);
        canvas.rotate(degrees, x, y);
        canvas.drawText("text", x, y, mPaint);
        canvas.restore();
    }
}

现在我希望一切都应该清楚画布旋转的工作原理......

【讨论】:

  • 如果我想将文本偏移到dy 的中点,我仍然感到困惑。如果我将 dy/2 添加到 drawText 这将转换回原始(未转换)视图中 x 坐标的偏移
  • 所以在调用 drawText 时使用 x + Math.hypot(dx, dy) / 2 而不是 x
  • 是的 x- Math.hypot(dx,dy)/2 完成了这项工作......现在明白了......谢谢!
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 2015-10-01
  • 2017-08-06
  • 2013-04-06
  • 2015-05-25
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多