【问题标题】:android how to rotate canvas rectandroid如何旋转画布矩形
【发布时间】:2012-11-27 00:50:45
【问题描述】:

我创建了一个特定大小的矩形,现在我想将它旋转到 45 度,我使用了 canvas.rotate、matrix,但无法正常工作。如何在android中旋转画布的正确方法?我对 Path.Direction.CW 很感兴趣,它是用来旋转的吗?但我在 Path() 中看不到任何旋转功能

    paint.setAntiAlias(true);
    paint.setStrokeWidth(2);
    paint.setColor(Color.BLUE);
    paint.setAlpha(75);

    Path path = new Path();
    path.addRect(166, 748, 314, 890, Path.Direction.CW);
    canvas.rotate(45);
    canvas.drawPath(path, paint);

【问题讨论】:

  • 如果您对 Path.Direction 感到好奇,为什么不使用 Google?第一次点击 - developer.android.com/reference/android/graphics/…。为什么在绘制路径之前旋转画布?你想达到什么目的?
  • 它说顺时针和逆时针,我不明白它的意思。很简单,我只想旋转我创建的矩形“path.addRect(166, 748, 314, 890, Path.Direction.CW);”。如果我删除 canvas.rotate(45),它将在屏幕上显示一个矩形,现在我想将它旋转 45 度。已经用谷歌搜索了,但找不到任何解决方案
  • 您已经旋转了画布,然后绘制了路径。所以只有在路径(看起来什么都没有)之前绘制的任何东西被旋转。为什么没有绘制路径然后旋转?
  • 你的意思是这样吗? paint.setAntiAlias(true);油漆.setStrokeWidth(2); paint.setColor(Color.BLUE);油漆.setAlpha(75);路径 path = new Path(); path.addRect(166, 748, 314, 890, Path.Direction.CW); canvas.drawPath(路径,油漆);画布.旋转(45);它不工作,同样,没有任何变化

标签: android canvas path rotation rect


【解决方案1】:

正确的方式应该是这样的:

Path path = new Path();
path.addRect(166, 748, 314, 890, Path.Direction.CW);
canvas.save(); // first save the state of the canvas
canvas.rotate(45); // rotate it
canvas.drawPath(path, paint); // draw on it
canvas.restore(); // restore previous state (rotate it back)

【讨论】:

    【解决方案2】:

    要绘制一个旋转的矩形,您需要在绘制之前旋转画布(如果要绘制其他任何内容,则将其旋转回右侧向上)。 Canvas.rotate() 只是改变了画布的变换矩阵,它变换了调用之后绘制的形状。

    canvas.save();
    canvas.rotate(45);
    canvas.drawRect(166, 748, 314, 890, paint);
    canvas.restore();
    

    Path.Direction 与旋转变换无关。来自docs

    指定闭合形状(例如矩形、椭圆形)在 被添加到路径中。

    【讨论】:

      【解决方案3】:

      如果你想从(x,y) 点画一些东西,你必须围绕(x,y) 点旋转画布。为此,您应该使用

      canvas.rotate(45,x,y);
      

      所以,

      canvas.save();
      canvas.rotate(45,x,y);
      //all drawing from (x,y) point
      canvas.restore();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-20
        • 2021-10-07
        • 2016-08-05
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-03-07
        相关资源
        最近更新 更多