android如何旋转画布矩形

Posted

技术标签:

【中文标题】android如何旋转画布矩形【英文标题】:android how to rotate canvas rect 【发布时间】: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);它不工作,同样,没有任何变化 【参考方案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();

【讨论】:

以上是关于android如何旋转画布矩形的主要内容,如果未能解决你的问题,请参考以下文章

Android使用ontouch在画布上绘制矩形

android 画布区域,android:canvas绘制一个透明矩形并填充其余区域

画布旋转后如何检测画布上的点

画布上的 Android 拖放 2D

Android中使用画笔和画布绘制一个矩形

试图在android中旋转布局,画布似乎不会旋转