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如何旋转画布矩形的主要内容,如果未能解决你的问题,请参考以下文章