10

我创建了一个特定大小的矩形,现在我想将它旋转到 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);
4

3 回答 3

18

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

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

Path.Direction 与旋转变换无关。从文档

指定闭合形状(例如矩形、椭圆形)添加到路径时的定向方式。

于 2013-10-29T14:30:25.427 回答
7

如果要从(x,y)点绘制某些东西,则必须围绕(x,y)点旋转画布。为此,您应该使用

canvas.rotate(45,x,y);

所以,

canvas.save();
canvas.rotate(45,x,y);
//all drawing from (x,y) point
canvas.restore();
于 2015-12-05T11:11:31.460 回答
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)
于 2013-08-06T09:49:29.087 回答