我正在尝试使用Surfaceview和画布绘制创建Android自定义组件。这些组件可以通过触摸进行重新调整大小和旋转。考虑创建一个图像视图,其顶部、右侧、底部和左侧边缘可通过触摸和拖动所需的边缘来进行伸缩。我使用
我可以通过一些图片来说明它。下面的图显示了两个矩形,它们的边界也已知并分别显示在不同的颜色中。请考虑将绿色矩形视为组件的初始边界,即旋转-45度,中心点为(10,10)。现在要调整矩形的顶部边缘,并在下一个图2中显示。
从图2中可以看出,Y位置从6减少到4。旋转的矩形也显示为粉色。请记住,我在组件处于旋转角度-45度时进行调整大小,因此在拖动顶部边缘时,矩形的左、右和底部位置不应更改。因此,图2的粉色矩形的左侧、右侧和底部坐标应与图1的绿色矩形相同。所得到的矩形与期望的矩形的比较显示在图3中。
在图3中,黄色矩形是所需的输出。获得的矩形粉色向上移动,与绿色旋转矩形相比有所偏移,并且这取决于旋转角度。
如何计算黄色矩形的边界/中心点,以便正确实现组件的调整大小?请告诉我是否有可以应用的数学方法?
所需的点/坐标在图3中标为红色圆圈。
RectF
来保持组件的边界,对于旋转,我使用canvas.rotate(angle, bounds.centerX(),bounds.centerY())
方法。问题是,在调整大小时,顶部边缘应固定左、右和底部边缘,如果旋转角度不为0度,则无法固定它。我需要一种数学解决方案,以查找相对于实际矩形边界的旋转矩形的x、y坐标。我可以通过一些图片来说明它。下面的图显示了两个矩形,它们的边界也已知并分别显示在不同的颜色中。请考虑将绿色矩形视为组件的初始边界,即旋转-45度,中心点为(10,10)。现在要调整矩形的顶部边缘,并在下一个图2中显示。
从图2中可以看出,Y位置从6减少到4。旋转的矩形也显示为粉色。请记住,我在组件处于旋转角度-45度时进行调整大小,因此在拖动顶部边缘时,矩形的左、右和底部位置不应更改。因此,图2的粉色矩形的左侧、右侧和底部坐标应与图1的绿色矩形相同。所得到的矩形与期望的矩形的比较显示在图3中。
在图3中,黄色矩形是所需的输出。获得的矩形粉色向上移动,与绿色旋转矩形相比有所偏移,并且这取决于旋转角度。
如何计算黄色矩形的边界/中心点,以便正确实现组件的调整大小?请告诉我是否有可以应用的数学方法?
所需的点/坐标在图3中标为红色圆圈。