在Android画布上绘制一堆旋转的矩形

4
我有一个任务需要在画布上绘制许多矩形,但是它们都有旋转角度,必须在画布上旋转。在搜索解决此问题的方法时,我遇到了许多建议,指出绘制矩形并旋转画布(Canvas.rotate(angle))的方法,但它会将整个画布旋转,并且仅适用于一个矩形。在画布上绘制许多旋转的矩形的最佳方法是什么?我想绘制矩形(单色,使用Paint),而不是位图,因为这样可以提高时间效率和节省内存。
目前我会采用的主要方法是创建很多画布,每个画布上绘制一个矩形,并考虑矩形的角度旋转画布。我认为这不是一种明智的方式,因为需要创建许多画布,并且对于每个画布都应该创建一个单独的SurfaceHolder,这很麻烦...
请注意,对于每个矩形,我都有其4个角的坐标、宽度、高度、中心和角度。

3
你可以选择两种方式来绘制旋转矩形:第一种方法是先调用 save() 保存画布状态,然后使用 rotate() 旋转画布,接着绘制矩形,最后使用 restore() 恢复画布状态;第二种方法是创建一个旋转后的 Path 对象来包含你的矩形,并通过调用 Canvas#drawPath 方法来绘制它。不过我认为第一种方法会更快。 - pskink
谢谢您,pskink,提供这两个建议。我已经在我的程序中实现了第一个建议,并且它起作用了。 - Dainius Šaltenis
1个回答

6
你可以旋转画布以便绘制每个矩形,然后恢复原来的方向。接下来为下一个矩形设置新的旋转角度,绘制、存储并重复上述步骤。
大致如下:
  //Save and rotate canvas 
  canvas.save();
  canvas.rotate(angle, pivotX, pivotY);

  canvas.drawRect(...);

  //restore canvas
  canvas.restore();

  // rotate and draw the second rectangle
  canvas.rotate(angle, pivotX, pivotY);

  canvas.drawRect(...);

  canvas.restore();

  // repeat as necessary

其中'angle'对于每个矩形都是不同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接