android如何旋转画布rect

时间:2012-12-09 11:08:54

标签: android canvas path rotation rect

我创建一个特定大小的矩形,现在我想将它旋转到45度,我使用canvas.rotate,矩阵,但不工作。如何在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);

3 个答案:

答案 0 :(得分:15)

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

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

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

  

指定闭合形状(例如rects,ovals)的方向   被添加到路径中。

答案 1 :(得分:5)

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

canvas.rotate(45,x,y);

所以,

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

答案 2 :(得分:0)

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

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)