我正在尝试制作一个我成功制作的可调整大小的触摸视图。您可以找到代码How to make view resizable on touch event。
它有4个角。您可以通过拖动其中一个角来重新调整该矩形的大小。但是现在我想增强该逻辑并希望在该代码中进行轮换。当用户触摸矩形边缘之一的中心时,我成功找到了角度。但现在的问题是我无法获得角的新位置,以便我可以重绘该矩形并且可以进行旋转。
问题是:如何根据角度计算 4 个角的新位置?.
我正在尝试制作一个我成功制作的可调整大小的触摸视图。您可以找到代码How to make view resizable on touch event。
它有4个角。您可以通过拖动其中一个角来重新调整该矩形的大小。但是现在我想增强该逻辑并希望在该代码中进行轮换。当用户触摸矩形边缘之一的中心时,我成功找到了角度。但现在的问题是我无法获得角的新位置,以便我可以重绘该矩形并且可以进行旋转。
问题是:如何根据角度计算 4 个角的新位置?.
如果您知道旋转的角度,则无需计算矩形的顶点。一个简单的方法如下
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.rotate(60.0f);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
canvas.drawRect(10, 10, 100, 100, paint);
canvas.restore();
}
据我了解,您想根据旋转角度计算新坐标……这可能比您想象的要简单:
x' = x × (cosα - sinα)
y' = y × sinα × cosα
因此,您只需以编程方式应用它,考虑和x'
的旋转结果在哪里x
和 相同,并且y'
是旋转角度。y
α
cosα
和sinα
函数在 Java 中可用作Math.cos(α)
and Math.sin(α)
,但注意:在 Java 中,所有三角函数都使用弧度而不是度数作为角度,因此您可以考虑:
rad = deg * 180 / π
适用于:
double deg = 45d; //Put instead your degrees
double rad = deg / 180 * Math.PI; //The radians convertion