我有一个矩形:Rect r = new Rect();
。我想将r
对象旋转到45度。我检查了解决方案,发现它可以用矩阵完成:
Matrix m = new Matrix();
// point is the point about which to rotate.
m.setRotate(degrees, point.x, point.y);
m.mapRect(r);
问题在于,我将r
传递给m.mapRect(r);
,它抱怨r
应该来自RectF
类型。我设法做到了:
RectF r2 = new RectF(r);
Matrix m = new Matrix();
// point is the point about which to rotate.
m.setRotate(degrees, point.x, point.y);
m.mapRect(r2);
但问题是我需要Rect
类型的对象而不是RectF
。因为我将r
对象传递给正在使用Rect
对象的外部类。
是否有另一种方法可以旋转矩形r
表单类型Rect
,除了这个方法并且没有旋转整个画布(画布包含一些其他元素)?
提前谢谢!
致以最诚挚的问候,Dimitar Georgiev
答案 0 :(得分:9)
以这种方式旋转矩形不会为您提供任何可用于绘图的内容。 Rect和RectF不存储有关旋转的任何信息。当您使用Matrix.mapRect()
时,输出RectF只是一个新的非旋转矩形,其边缘触及您想要的旋转矩形的角点。
您需要旋转整个画布以绘制矩形。然后立即取消旋转画布以继续绘制,因此旋转其中包含其他对象的画布没有问题。
canvas.save();
canvas.rotate(45);
canvas.drawRect(r,paint);
canvas.restore();
答案 1 :(得分:0)
如果对矩阵应用旋转,则可以使用另一种方法进行操作,则不应使用mapRect。您应该找出代表每个矩形边缘的4个初始点,并改用mapPoints。
float[] rectangleCorners = {
r2.left, r2.top, //left, top
r2.right, r2.top, //right, top
r2.right, r2.bottom, //right, bottom
r2.left, r2.bottom//left, bottom
};
Matrix m = new Matrix();
// point is the point about which to rotate.
m.setRotate(degrees, point.x, point.y);
m.mapPoints(r2);