我正在尝试使用 Surfaceview 和画布绘图在 Android 中创建自定义组件。组件可通过触摸重新调整大小和旋转。考虑创建一个图像视图,其顶部、右侧、底部和左侧边缘可通过触摸和拖动所需边缘进行缩放。我RectF
用来保持组件的边界,对于旋转我正在使用canvas.rotate(angle, bounds.centerX(),bounds.centerY())
方法。问题是在调整顶部边缘的大小时, Let 、 Right 和 Bottom 边缘应该固定,如果旋转角度不是 0 度,我无法修复它。我需要一个数学解决方案来找出旋转矩形相对于实际矩形边界的 x,y 坐标。
我可以借助一些图像来解释它。下图显示了两个矩形,它们的边界也是已知的,并以各自的颜色显示。将绿色矩形视为组件的初始边界,即。旋转 -45 度,中心为 (10,10)。现在要重新调整矩形顶部边缘的大小并显示在下一个图 2 中。
从图 2 可以看出,Y 位置从 6 减少到 4。旋转后的 Rectangle 也以粉红色显示。请记住,当组件处于旋转角度 -45 度时,我正在调整大小,因此在拖动顶部边缘矩形的左侧、右侧和底部位置时不应更改。因此,图 2 的粉色矩形应该具有与图 1 的绿色矩形相同的左、右和下坐标。获得的矩形和预期的矩形的比较如图 3 所示。
在图 3 中,黄色矩形是预期/必需输出。与绿色旋转的矩形相比,获得的矩形粉红色向上移动,并且变化取决于旋转角度。
- 我有旋转角度= -45度
- 实际(未调整大小)矩形的边界。
- 旋转时实际(未调整大小)矩形的边界 = -45 度。
- 重新调整大小的矩形的边界。
- 旋转时重新调整大小的矩形的边界 = -45 度。
如何计算黄色矩形的边界/中心。这样我就可以正确地调整组件的大小了吗?让我知道有什么数学可以应用吗?
所需的点/坐标在图 3 中标记为红色圆圈。